1.耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13个人围坐一圈,从第一个人开始循环报数,数到三排除,最后剩下的人就是叛徒
int people[13] = {1,2,3,4,5,6,7,8,9,10,11,12,13};
2.有1000000个数,每个数的取值范围都是0~999999,找出其中重复的数
#define COUNT 1000000
int main(void)
{
inta[COUNT] = {0};
for (int i = 0; i < COUNT; i++) {
int number = arc4random()%COUNT;//把随机数作为下标,值作为出现次数
a[number - 1] ++;
}
//输出重复的数字以及重复次数
for(int i = 0 ;i < COUNT;i++){
if (a[i] > 1) {
printf("%d repeats %d times\n",i+1,a[i]);
}
}
return0;
}
int people[13] = {1,2,3,4,5,6,7,8,9,10,11,12,13};
int count = 0;//用来记录报数
int number = 13;//记录活着的人数
int i = 0;//记录第几个人正在报数
while (number > 1) {
if (people[i] != 0) {
count++; //如果a[i ]没有被剔除掉,报数有效
} if (count == 3) {
people[i] = 0;//剔除掉,
count = 0;//报数清零
number--;//存活人数减一
}
i++;//记录报数的下一个人
if (i == 13) {
i = 0;// 当超出范围时,立即将报数人数置为第一人
}
} for (int i = 0; i < 13; i++) {
if (people[i] > 0) {
printf("叛徒是第%d人 ", people[i]);
}
}
2.有1000000个数,每个数的取值范围都是0~999999,找出其中重复的数
#define COUNT 1000000
int main(void)
{
inta[COUNT] = {0};
for (int i = 0; i < COUNT; i++) {
int number = arc4random()%COUNT;//把随机数作为下标,值作为出现次数
a[number - 1] ++;
}
//输出重复的数字以及重复次数
for(int i = 0 ;i < COUNT;i++){
if (a[i] > 1) {
printf("%d repeats %d times\n",i+1,a[i]);
}
}
return0;
}
本文介绍两个有趣的算法题目实现:一是利用排除法找出13个门徒中的叛徒;二是从100万个随机数中找出重复的数字及其重复次数。通过具体的C语言代码展示了算法的具体实现过程。
317

被折叠的 条评论
为什么被折叠?



