题目描述五年级一班全体学生做一个游戏,有 n 张纸牌,每张纸牌上分别标注着 1,2,3,4,⋯,n 个数字,初始时纸牌数字面朝上。
全班同学先将 1 的倍数的纸牌翻过来,然后再将 2 的倍数的纸牌再翻过来,一直翻到 n 的倍数的纸牌。
统计翻到最后数字面向下的纸牌分别是哪些?
例如,有 1,2,3 三张纸牌,开始时纸牌数字面朝上,第一次翻转 1 的倍数,将所有序号为 1 的倍数的纸牌翻转;第二次翻转 2 的倍数,将所有序号是 2 的倍数的纸牌再翻转;第三次翻转 3 的倍数,将所有序号是 3 的倍数纸牌再翻转,翻牌到此结束。
最后数字面向下的纸牌是序号为 1 的那张。
输入
输入第一行输入数字为 n,表示有 n 张纸牌 (1≤n≤1000000000)。
输出
输出数字面向下的纸牌数字。
在同一行输出,两个数字之间用一个空格隔开。
样例输入
3
样例输出1
题目可以理解为输出n以内的平方数。
解析:
设一个数 x < = n , i 从 1 到 n 。
x 若为 i 的倍数则翻面,那么只要求 x 的因子个数即可。
已知平方数的因子为奇数个,因此纸牌会向下,所以只要输出平方数即可。
#include
#include
int main()
{
int n;
scanf("%d",&n);
printf("1");
for(int i=2;i<=sqrt(n);i++)
printf(" %d",i*i);
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)