您的位置:首页 > 其它

杭电1014解题报告

2012-05-01 19:28 316 查看
说实话,杭电的题有点变态~~~~~~~对格式要求这样严格

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

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

#include<stdio.h>
intmain()
{
longintSTEP,MOD;
while(scanf("%ld%ld",&STEP,&MOD)!=EOF)
{
intk=1,count=1,M,N;
longintseed[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%10ldGoodChoice\n\n",STEP,MOD);//GoodChoice前面有4个空格,5个空格不给过的。
}
else
{
printf("%10ld%10ldBadChoice\n\n",STEP,MOD);//而且必须2个\n,否则也不给过。悲催死.
}
}
return0;
}
以下是摘得大牛的代码,供参考~~~~~
#include<iostream>
#include<iomanip>
usingnamespacestd;
inlineintprand();
intseed,step,mod;
intmain()
{
inthead,tail,decreasor=0;
while(cin>>step>>mod&&mod){
decreasor=0;
seed=0;

//第一个随机数
head=prand();

//在0到mod-1的范围内,所以整数的总和
for(inti=0;i<mod;i++)
decreasor+=i;

//减去第一个随机数
decreasor=decreasor-head;

//如果是goodchoice,decreasor将在第二个重复周期前减至0
while(head!=(tail=prand())){
decreasor-=tail;
}

cout<<setw(10)<<step
<<setw(10)<<mod
<<"";
if(decreasor)
cout<<"BadChoice";
else
cout<<"GoodChoice";
cout<<endl<<endl;
}
return0;
}

//随机数产生器
inlineintprand()
{
seed=(seed+step)%mod;
returnseed;
}
本题其实考察的是两个数的互质,如果两个数互质输出goodchoice否则输出badchoice
看透题就这样简单的爱当初做这道题我就没看透题。

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: