黑马程序员技术交流社区
标题:
求教如何用C找到15个耶稣学徒中的那个叛徒?
[打印本页]
作者:
tabor
时间:
2015-6-8 16:50
标题:
求教如何用C找到15个耶稣学徒中的那个叛徒?
当时没有做出来的,请教下~~
作者:
talent123
时间:
2015-6-8 17:43
/*
耶稣有15个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:
15人围坐一圈,从第一个开始报号:1,2,3,1,2,3……,凡是报到“3”就退出圈子,
最后留在圈内的人就是出卖耶稣的叛徒,请找出它原来的序号。
*/
#include<stdio.h>
#include<stdlib.h>
//定义节点
typedef struct _node{
int num;
struct _node *next;
}Node;
//定义链表
typedef struct _list{
Node *head;
Node *tail;
}List;
int main(){
List list;
list.head = list.tail = NULL;
int i;
//做15个节点,每个节点的num属性就是门徒的标号,从1到15.
for (i =0; i < 15; i++){
Node *p = (Node *)malloc(sizeof(Node));
p->num = i + 1;
p->next = NULL;
if (list.tail){
list.tail->next = p;
list.tail = p;
}else {
list.head = list.tail = p;
}
}
//把链表头尾连起来
list.tail->next = list.head;
//指针 p,q遍历,q在p前面一个节点
Node *p = list.head;
Node *q = NULL;
//按照数到3就删除节点的顺序,
for (i = 2; ; i++){
// i=2的时候,q在1,p在2
q = p;
p = p->next;
//如果p的下一个就是自己,说明链表里只有1个节点了,结束循环。
if (p->next == p){
printf("last = %d", p->num);
break;
}
//i被3整除就删除节点,同时输出 删除的节点num
if (i % 3 == 0){
q->next = p->next;
printf("delete%d\n", p->num);
}
}
return 0;
}
复制代码
作者:
luguo
时间:
2015-6-8 18:03
下面是一种,还有一种使用约瑟夫函数的方法,但是因为没学过,所以不推荐
#include <stdio.h>
int main()
{
// 创建一个集合,并初始化
int array[15] = {0};
int j = 0;
// 初始15个成员
int count = 15;
// 排除成员,直到只剩下一个人
while (count > 1)
{
for (int i = 0; i < 15; i++)
{
if (array[i] == 0)
{
j++;
// 如果j == 3 报号重新开始(j = 0) 并且排除一个人(count--)
if (j == 3)
{
array[i] = 1;
j = 0;
count--;
}
}
}
}
for (int i = 0; i < 15; i++)
{
if (array[i] == 0)
printf("叛徒的编号是%d\n",i+1);
}
}
作者:
tabor
时间:
2015-6-9 09:04
好强大,真心强大,谢谢!!!
作者:
天下1083
时间:
2015-6-9 11:02
入学测试吧,我也做了这个
作者:
tabor
时间:
2015-6-9 14:57
///////有点不科学,总是第5个,那样的话不能体现出程序的功能强大,是不是应当换题库哦//////
作者:
白0702
时间:
2015-6-9 16:50
学习了,这个可以用好几种方式都可以实现。
作者:
holfioo
时间:
2015-6-9 20:11
talent123 发表于 2015-6-8 17:43
强大到读不懂!!!!
作者:
aofex
时间:
2015-6-9 20:15
高手啊 都是高手啊
作者:
龙豫天下
时间:
2015-6-9 23:03
你们这些题库是去哪里找的,最近在学基础班,不知道去那里找练习题做
作者:
⒈苆都s.兲憶
时间:
2015-6-9 23:11
大神!学习了!
作者:
shitou812
时间:
2015-6-10 12:27
学习了,基础视频看了不到一半,觉得方法多不一定是好事
作者:
李旭飞
时间:
2015-6-11 09:25
这个叼,得学习学习
作者:
李旭飞
时间:
2015-6-11 09:27
talent123 发表于 2015-6-8 17:43
我觉得这不可能实现,因为最后剩下的会是两人
作者:
talent123
时间:
2015-6-11 11:47
李旭飞 发表于 2015-6-11 09:27
我觉得这不可能实现,因为最后剩下的会是两人
能不能实现你运行一下就知道了
只有2个人 也会来回数到3
最后剩下的是5号
作者:
lipeng524824
时间:
2015-6-13 23:33
好厉害
作者:
马贺飞
时间:
2015-6-15 22:59
围观学习
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2