
ACM 杭电大1014题目解题思路? 30
我用的是计算出数列的循环周期,然后判断周期是不是跟mod相等来判断符合不符合要求,下面是我的代码,自己测试的几组数据也没有错啊,为什么就wronganswer呢?这解题思...
我用的是计算出数列的循环周期,然后判断周期是不是跟mod相等来判断符合不符合要求,下面是我的代码,自己测试的几组数据也没有错啊,为什么就wrong answer 呢?这解题思路不行吗?那又用什么原理解题呢?请高手指教,谢谢!!
http://acm.hdu.edu.cn/showproblem.php?pid=1014
/* Note:Your choice is C IDE */
#include "stdio.h"
int main()
{
long i,set,mod,seed1=0,seed2,count;
//freopen("lab.txt","r",stdin);
while(scanf("%ld%ld",&set,&mod)!=EOF)
{
seed1=0;
count=1;
for(i=0;i<mod;i++)
{
seed2=(seed1+set)%mod;
if(seed2==0)
break;
else
count++;
seed1=seed2;
}
printf("%10ld%10ld ",set,mod);
printf(count==mod?"Good Chioce\n\n":"Bad Choice\n\n");
}
return 0;
}
三楼:
我用的是long额,怎么加在这个题里都不会越界的!!!
没人解答我的思路为什么不行啊!!
投票了,呵呵!! 展开
http://acm.hdu.edu.cn/showproblem.php?pid=1014
/* Note:Your choice is C IDE */
#include "stdio.h"
int main()
{
long i,set,mod,seed1=0,seed2,count;
//freopen("lab.txt","r",stdin);
while(scanf("%ld%ld",&set,&mod)!=EOF)
{
seed1=0;
count=1;
for(i=0;i<mod;i++)
{
seed2=(seed1+set)%mod;
if(seed2==0)
break;
else
count++;
seed1=seed2;
}
printf("%10ld%10ld ",set,mod);
printf(count==mod?"Good Chioce\n\n":"Bad Choice\n\n");
}
return 0;
}
三楼:
我用的是long额,怎么加在这个题里都不会越界的!!!
没人解答我的思路为什么不行啊!!
投票了,呵呵!! 展开
3个回答
展开全部
就是判断两个数是不是互素。。。
这个是我的代码
#include <stdio.h>
int gcd(int a, int b)
{
int max = a > b ? a : b;
int min = a < b ? a : b;
a = max;
b = min;
int r = a % b;
if(0 == r)
return b;
else
return gcd(b, r);
}
int main(){
int s, m;
while( scanf( "%d%d", &s, &m ) != EOF ){
getchar();
printf( "%10d%10d", s, m );
if( gcd( s, m ) == 1 ){
printf( " %s\n\n", "Good Choice" );
}else{
printf( " %s\n\n", "Bad Choice" );
}
}
return 0;
}
好像是数论还是密码学的知识,不记得了。
这个是我的代码
#include <stdio.h>
int gcd(int a, int b)
{
int max = a > b ? a : b;
int min = a < b ? a : b;
a = max;
b = min;
int r = a % b;
if(0 == r)
return b;
else
return gcd(b, r);
}
int main(){
int s, m;
while( scanf( "%d%d", &s, &m ) != EOF ){
getchar();
printf( "%10d%10d", s, m );
if( gcd( s, m ) == 1 ){
printf( " %s\n\n", "Good Choice" );
}else{
printf( " %s\n\n", "Bad Choice" );
}
}
return 0;
}
好像是数论还是密码学的知识,不记得了。
展开全部
#include<stdio.h>
int main()
{
long m,n,i,f1,f2;
while(scanf("%ld%ld",&m,&n)!=EOF)
{
printf("%10d%10d",m,n);
f1=0;
for(i=1;i<n;i++)
{
f2=(f1+m)%n;
f1=f2;
if(f1==0)
{
printf(" Bad Choice\n\n");
break;
}
}
if(i>=n)
printf(" Good Choice\n\n");
}
return 0;
}
int main()
{
long m,n,i,f1,f2;
while(scanf("%ld%ld",&m,&n)!=EOF)
{
printf("%10d%10d",m,n);
f1=0;
for(i=1;i<n;i++)
{
f2=(f1+m)%n;
f1=f2;
if(f1==0)
{
printf(" Bad Choice\n\n");
break;
}
}
if(i>=n)
printf(" Good Choice\n\n");
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
int main()
{
int a,b,f(int,int);
while(scanf("%d%d",&a,&b)==2)
printf("%10d%10d %s Choice\n\n",a,b,((f(a,b)==1)? "Good":"Bad"));
return 0;
}
int f(int x,int y){
return ((y==0)? x:f(y,x%y));
}
自己刚刚写的 过了 我的就是算公约数。
你的看了一下,有几个问题:1,加法会越界 int+int 很可能就超了,我也刚玩hdoj,被1002彻底阴过……,这个会造成wa。 2,超时,自己算算循环次数吧,没wa也tle。 还是得用公约数的方法。
int main()
{
int a,b,f(int,int);
while(scanf("%d%d",&a,&b)==2)
printf("%10d%10d %s Choice\n\n",a,b,((f(a,b)==1)? "Good":"Bad"));
return 0;
}
int f(int x,int y){
return ((y==0)? x:f(y,x%y));
}
自己刚刚写的 过了 我的就是算公约数。
你的看了一下,有几个问题:1,加法会越界 int+int 很可能就超了,我也刚玩hdoj,被1002彻底阴过……,这个会造成wa。 2,超时,自己算算循环次数吧,没wa也tle。 还是得用公约数的方法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询