输入一个无符号整数,判断该数是否为幸运数。
注:从自然数序列:
1,2,3,4,5,6,7,8,9,10,…中的第2项开始,隔1个取走1个,得序列:
1,3,5,7,9,11,13,15,…
再从其第3项开始,隔2个取走1个,得序列:
1,3,7,9,13,15,19,…
按以上规律不断继续下去,永远取不走的数称幸运数。
Input
有多组数据,每组数据占一行,为无符号整数n(n≤10000),输入最后一行是一个0,表示输入结束并且不需要处理。
Output
判断n是否为幸运数。若是,则输出:Yes,it is.否则,输出: No it isn't.
题目链接:http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=10096&courseid=0
Time Limit: 1000ms,
判断是否幸运数 c/c++ 求解答算法
答案:2 悬赏:80
解决时间 2021-03-07 00:38
- 提问者网友:低唤何为爱
- 2021-03-06 11:33
最佳答案
- 二级知识专家网友:滚刀废物浮浪人
- 2021-03-06 12:22
#include "stdio.h"
bool fun(unsigned int *d,unsigned int n,int start)
{
int j,i,k;
if(d[n-1]==10001) return false;
if(start
{
i=0;j=0;
while(i
{
while(d[i+j]==10001) j++;
i++;
}
for(k=i+j-1;k
{
if(k==n) return false;
d[k]=10001;
i=0;j=0;
while(i
{
while(d[i+j]==10001) j++;
i++;
}
}
return fun(d,n,start+1);
}
else
{
return true;
}
}
int main()
{
unsigned int n,d[10000];
printf("输入无符号整数n(n≤10000:");
scanf("%d",&n);
for(int i=0;i
d[i]=i+1;
if(fun(d,n,2))
printf("Yes,it is.");
else
printf("No it isn't. ");
}
bool fun(unsigned int *d,unsigned int n,int start)
{
int j,i,k;
if(d[n-1]==10001) return false;
if(start
i=0;j=0;
while(i
while(d[i+j]==10001) j++;
i++;
}
for(k=i+j-1;k
if(k==n) return false;
d[k]=10001;
i=0;j=0;
while(i
while(d[i+j]==10001) j++;
i++;
}
}
return fun(d,n,start+1);
}
else
{
return true;
}
}
int main()
{
unsigned int n,d[10000];
printf("输入无符号整数n(n≤10000:");
scanf("%d",&n);
for(int i=0;i
if(fun(d,n,2))
printf("Yes,it is.");
else
printf("No it isn't. ");
}
全部回答
- 1楼网友:而你却相形见绌
- 2021-03-06 13:24
也许是的。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯