标题:高手进。。高高高手进!!
只看楼主
龙一飞
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2005-11-18
 问题点数:0 回复次数:6 
高手进。。高高高手进!!

我是个才学C的家伙。今天遇到一道题。希望高手指教下。。高手再回贴,
题是这样的。在一条船上。坐了30人。准备过河。。但是人太多要丢下15个。
,每次都报数。到第9人时候丢下去。循环丢下15人。但是这30人中有15人是基督教徒。上
帝不想教徒门丢下海。问:怎么排列才可以留下15个教徒。丢下其他的人,
用C来表示!。。小弟这里先谢谢大虾们了。。

搜索更多相关主题的帖子: 基督教徒 上帝 
2005-11-18 15:22
zinking
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:35
帖 子:916
专家分:0
注 册:2004-12-5
得分:0 
约瑟夫环
自己找相关的数据结构和算法看吧
到处都有的

http://kongfuziandlife. http://codeanddesign.
2005-11-18 17:06
nFox
Rank: 1
等 级:新手上路
威 望:1
帖 子:28
专家分:0
注 册:2005-11-16
得分:0 

这个是用数组做的,偶没有测试,偶想方法应该可以吧....(在VC上编译的)
#include<stdio.h>

int main()
{
int people[30]; /* 全部人的位置编号 */
int array[15]; /* 存放被丢下海人的位置 */
int position[15]; /* 存放基督教徒的位置 */
int index=0;
int i=0;
for(;index<30;index++)
people[index]=index+1;

for(index=0;index<15;index++) /*找出落水者的位置编号 */
{
i=(i+8)%30;
while(people[(i+8)%30]==-1)
i=(i+1)%30;
array[index]=people[i];
people[i]=-1;
}

for(index=0,i=0;i<15;i++,index++) /*将基督教徒安置在其余位置 */
{
while(people[index]==-1)
index++;
position[i]=people[index];
}


for(index=0;index<15;index++) /*输出*/
printf("%d\t%d\n",array[index],position[index]);

return 0;
}





天行健,君子以自强不息;地势坤,君子以厚德载物
2005-11-18 18:02
xhy520
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-11-18
得分:0 
想问一下各位高手while(people[(i+8)%30]==-1)
是什么意思!!
谢谢!!
2005-11-20 20:27
ElfDN
Rank: 4
等 级:贵宾
威 望:11
帖 子:291
专家分:0
注 册:2005-11-13
得分:0 

约瑟夫环的技巧么,设定初点是-1,这样加一次是0。这个就是全约瑟夫环的技巧了


2005-11-20 21:43
volte
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:69
帖 子:1167
专家分:1316
注 册:2004-12-19
得分:0 
大家有没有想过用循环链表试一试

大家都是朋友,有空就来坐坐!
2005-11-21 21:49
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
得分:0 
同意楼上.用链表的话只有两个字形容"可爱".

=×&D o I p R e E n C g T l X&×=
2005-11-21 21:59



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-34042-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.164896 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved