今天去面试,面试官问了我这样一个问题,当时答的很近了,但是还差一点,最后还是被pass了
原题是这样:一堆硬币有n个,都是朝下的,翻转n次,第一次翻转能被1整除的,第2次翻转能被2整除的,第三次翻转能被3整除的,这样直到第n次翻转能被n整除的,问最后朝上的是多少个?
思路很简单,就怕你想不到:第i次翻转硬币的时候,如果所有小于i的数中,能被i整除的个数是奇数个,最后它就是朝上的,就是这么简单
代码是这样的:
#include <stdio.h>
int countFactor(int n)
{
int ret = 0, i;
for(i = 1; i <=n; i++)
if(n%i == 0)
ret++;
return ret;
}
void main()
{
printf("please input the number of the coin\n");
int x, ret = 0;
scanf("%d",&x);
for(int i = 1; i <= x; i++)
if(countFactor(i)%2 == 1)
{
printf("%d\n",i);
ret++;
}
printf("the ouput is:%d\n",ret);
}