A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yangguangyu 中级黑马   /  2015-9-12 22:08  /  1899 人查看  /  19 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

小伙伴们我在看IOS基础视频第十八天的部分,这会儿讲到了有关类的一些列介绍,感觉很像大学里学的C++,反正都是面向对象的语言嘛!其中我遇到了一个问题不能解决,希望指点。
题目: 耶稣有15个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:15人围坐一圈,从第一个开始报号:1,2,3,1,2,3……,凡是报到“3”就退出圈子,最后留在圈内的人就是出卖耶稣的叛徒,请找出它原来的序号。

19 个回复

倒序浏览
求代码或者思路,谢谢。
回复 使用道具 举报
。。。我擦 好高端的题目啊
回复 使用道具 举报
看这题目有点晕,智商跌到了谷低
回复 使用道具 举报
确实和C++中的类很相似 只是关键字有点区别
回复 使用道具 举报
你好大神,我的视频里面怎么没这个例子???我们难道下的视频不一样吗????
回复 使用道具 举报
这个用c就可以做出来的
回复 使用道具 举报
这个是不是要用到continue语句的吧
回复 使用道具 举报
看完直接歇菜。。。。
回复 使用道具 举报
这个最后好像 有两个人在 圈里吧、、、、
回复 使用道具 举报
使用一个布尔类型,或者使用0和1的枚举类型的数组怎么样?
1.设置一个计数器counter3为0,用于每前进3项的过程中产生的有效统计。设置counterDrop为0,用于统计被排除的项目数量,也是循环的终止条件。所有项目初始化为false。false含义是未排除,true的含义是已经排除。使用指针从数组的第0项开始扫描。
2.在第0项开始向后依次扫描,当扫描的项目为true,counter就不加1,扫描项目i继续前进(条件见第4项),继续向下扫描,如果扫描的项目是false,counter就加1,i继续前进
3.当counter为3时,该项目的false改为true,同时counter变为0
4.指针走到结尾时,需要回到数组首部。因此i继续前进的条件是:i=(i+1)%15
5.整个循环的终止条件是,当counterDrop==14时。
6.从第0项开始扫描,true的项目跳过,false的项目输出(叛徒),运行结束。
这是一个笨办法,欢迎改进。
回复 使用道具 举报
lixj1991 发表于 2015-9-14 22:32
使用一个布尔类型,或者使用0和1的枚举类型的数组怎么样?
1.设置一个计数器counter3为0,用于每前进3项的 ...

修改一下哈,第3条false改为true之后,counterDrop也++
回复 使用道具 举报
还没有看到这里来
回复 使用道具 举报
还有一个或许好一点的方法:使用环形链表
成员:
int id变量,标记第id个人(你也可以使用char *来显示人名)id的初始化的值可以是0到14(char* 的人名各不相同即可)
结构体类型* next指针,指向下一个结构体,初始化方法是:第id项的指针指向第(id+1)%15项,如果使用char*类型,就自己安排顺序,是环形链表即可
算法:
使用初始化为NULL的结构体指针*scan,*save和*drop,当前总剩余项目数survivor;
scan的初始化值为第0项,save和drop初始化为null,survivor=15
扫描时scan和counter依次前进:scan前进的方式时scan=scan->next,counter=counter+1;
当counter为2时,save=scan
当counter为3时,drop=scan;save.next=drop.next;然后释放掉drop指向的空间,并把drop设为null;leave=leave-1,这段代码的目的是锁定干掉的项,先把它前一项的next指针与干掉项的后一项挂钩,然后干掉它,幸存者数目减1
当leave=1时循环结束,最后留下的这一项就是要输出的,输出它的标记的id的值
写得不是很仔细,欢迎指正
回复 使用道具 举报
lixj1991 发表于 2015-9-14 23:10
还有一个或许好一点的方法:使用环形链表
成员:
int id变量,标记第id个人(你也可以使用char *来显示人名 ...

更正一下,因为save和drop都是指针,因此
save.next=drop.next;
改为
save->next=drop->next;
回复 使用道具 举报
或许使用环形的双向链表可以进一步简化,刚才的算法是基于单向链表的,因此总是需要使用save保存需要干掉的项目的前一项。如果使用双向链表或许只需要一个drop临时指向要被干掉的项,当适当修改相关的前后项指针之后,就可以释放掉drop了。
回复 使用道具 举报
这就是个数学问题呀,哈哈
回复 使用道具 举报
这不是基础测试题里的嘛
回复 使用道具 举报
取余方法可行?貌似.....额...不会
回复 使用道具 举报
学习学习!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马