杭电1014解题报告

来源:互联网 发布:河北广电网络集团地址 编辑:程序博客网 时间:2024/05/21 10:12

说实话,杭电的题有点变态~~~~~~~对格式要求这样严格 

本题表面是判断能不能取遍m的余数~~~~~~其实考的是互质~~~~

http://acm.hdu.edu.cn/showproblem.php?pid=1014

#include <stdio.h>int main(){    long int STEP,MOD;    while(scanf("%ld%ld",&STEP,&MOD)!=EOF)    {        int k=1,count=1,M,N;        long int seed[100000];        seed[0]=0;        seed[k]=(seed[k-1]+STEP)%MOD;        while(seed[k]!=seed[0])        {            k++;                                   //K 应该在seed[k]=(seed[k-1]+STEP)%MOD前面自增            seed[k]=(seed[k-1]+STEP)%MOD;            count++;            }        if(count==MOD)        {            printf("%10ld%10ld    Good Choice\n\n",STEP,MOD);//Good Choice前面有4个空格,5个空格不给过的。      
         }        else        {            printf("%10ld%10ld    Bad Choice\n\n",STEP,MOD);//而且必须2个\n,否则也不给过。悲催死.        }    }    return 0;}
以下是摘得大牛的代码,供参考~~~~~
#include <iostream>  #include <iomanip>   using namespace std;  inline int prand();  int seed, step, mod;  int main()  {      int head, tail, decreasor = 0;      while (cin >> step >> mod && mod) {          decreasor = 0;          seed = 0;            // 第一个随机数           head = prand();                    // 在 0 到 mod-1 的范围内,所以整数的总和           for (int i = 0; i < mod; i++)              decreasor += i;                    // 减去第一个随机数           decreasor = decreasor - head;                    // 如果是good choice,decreasor 将在第二个重复周期前减至 0           while (head != (tail = prand())) {              decreasor -= tail;          }            cout << setw(10) << step               << setw(10) << mod               << "    ";          if (decreasor)              cout << "Bad Choice";          else              cout << "Good Choice";          cout << endl << endl;      }      return 0;  }    // 随机数产生器   inline int prand()  {      seed = (seed + step) % mod;      return seed;  }  
 
本题其实考察的是两个数的互质,如果两个数互质输出good choice 否则输出bad choice
看透题就这样简单的   爱   当初做这道题我就没看透题。
 
原创粉丝点击