hdu 1014 Uniform Generator
2016-05-13 13:31
288 查看
看网上大神说这个题实质上是求最大公约数,看是否两个数的最大公约数为1,是的话就是good;不是的话就是bad;听起来很简便,不过毕竟我是弱鸡,想不明白怎么回事,还是老老实实的按常规思路来吧。
题意很简单,按照给出的公式计算,推算0~mod-1之间的数是否都出现过就行。计算出所有seed然后用个循环遍历一下看是否都有即可。注意seed是循环出现的,所以计算到第一次循环结束就可以了。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int seed[110000],b[110000];
int step,mod,i,j;
while(scanf("%d%d",&step,&mod)!=EOF)
{
seed[0]=0;
int flag=0;
memset(b,0,sizeof(b));
memset(seed,0,sizeof(seed));
for(i=0;i<=mod-1;i++)
{
seed[i+1]=(seed[i]+step)%mod;
b[seed[i+1]]++;
}
for(j=1;j<=mod-1;j++)
{
if(b[j]==0)
{
flag=1;
break;
}
}
if(flag==1)
printf("%10d%10d Bad Choice\n",step,mod);
else
printf("%10d%10d Good Choice\n",step,mod);
printf("\n");
}
return 0;
}
题意很简单,按照给出的公式计算,推算0~mod-1之间的数是否都出现过就行。计算出所有seed然后用个循环遍历一下看是否都有即可。注意seed是循环出现的,所以计算到第一次循环结束就可以了。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int seed[110000],b[110000];
int step,mod,i,j;
while(scanf("%d%d",&step,&mod)!=EOF)
{
seed[0]=0;
int flag=0;
memset(b,0,sizeof(b));
memset(seed,0,sizeof(seed));
for(i=0;i<=mod-1;i++)
{
seed[i+1]=(seed[i]+step)%mod;
b[seed[i+1]]++;
}
for(j=1;j<=mod-1;j++)
{
if(b[j]==0)
{
flag=1;
break;
}
}
if(flag==1)
printf("%10d%10d Bad Choice\n",step,mod);
else
printf("%10d%10d Good Choice\n",step,mod);
printf("\n");
}
return 0;
}
相关文章推荐
- Android面试题
- Android中的事件分发机制(上)——ViewGroup的事件分发
- 安卓在Activity中获取Fragment中的控件
- php webservice实例(转载)
- Ant之MacroDef——“宏”
- 从零学习前端开发之 ―― web前端开发基础环境配置(1)
- SSM框架——使用MyBatis Generator自动创建代码,会遇到“前言中不许有内容的错误”
- ImageLoader配置
- Windows平台使用Gitblit搭建Git服务器图文教程
- 典型用户场景、用户场景描述
- C#根据汉字获取编码和根据编码获取汉字
- 读世界是数字的有感
- Some Simple Models of Neurons
- POJ 1066 Treasure Hunt 计算几何
- 解析 html
- 《剑指offer》-从上往下打印二叉树
- 搜狗地图2016-Android-社招笔试题(包含Java基础部分)
- 求斐波那契数列的第n项
- iOS开发-Runtime详解(简书)
- n-1位数