判断是否幸运数 c/c++ 求解答算法
输入一个无符号整数,判断该数是否为幸运数。注:从自然数序列:1,2,3,4,5,6,7,8,9,10,…中的第2项开始,隔1个取走1个,得序列:1,3,5,7,9,11,...
输入一个无符号整数,判断该数是否为幸运数。
注:从自然数序列:
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, 展开
注:从自然数序列:
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, 展开
1个回答
展开全部
#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<n)
{
i=0;j=0;
while(i<start)
{
while(d[i+j]==10001) j++;
i++;
}
for(k=i+j-1;k<n;k=k+i+j-1)
{
if(k==n) return false;
d[k]=10001;
i=0;j=0;
while(i<start)
{
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<n;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<n)
{
i=0;j=0;
while(i<start)
{
while(d[i+j]==10001) j++;
i++;
}
for(k=i+j-1;k<n;k=k+i+j-1)
{
if(k==n) return false;
d[k]=10001;
i=0;j=0;
while(i<start)
{
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<n;i++)
d[i]=i+1;
if(fun(d,n,2))
printf("Yes,it is.");
else
printf("No it isn't. ");
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |