有思路写不出编程。。
原题是一百个和尚
皇帝要杀掉奇数位
一轮下来后再删掉新的奇数位
只剩下一个是幸存者
定义 int a[100]={0},然后根据下标扫描,奇数顺序的下标就把值设置为1,直到一遍扫描只有1个不为0的结束
#include <stdio.h>
void main()
{
int a[101] = {0};
int count =0;
while(1)
{
count = 0;
for(int i=1;i<=100;i++)
{
if(a[i] == 0)
count++;
if(count%2==1)
a[i] = 1;
}
if(count <= 3)
break;
}
for(int i=1;i<=100;i++)
{
if(a[i] == 0)
printf("%d\n",i);
}
}
定义数组保存数据,循环删除下标奇数的值,就是赋值为0,然后不为0的全部前移。
这种题目有2种思路:
1.每次循环把奇数位置改写为0,并把非0数字前移(可以用类似冒泡排序的算法来做,反复调用)
2.定义一个步长=2的i+1次方,一开始是2,然后是4,然后是8,这样去筛。数据不动而步长变化,效果一样,而且效率更高