我是个才学C的家伙。今天遇到一道题。希望高手指教下。。高手再回贴,
题是这样的。在一条船上。坐了30人。准备过河。。但是人太多要丢下15个。
,每次都报数。到第9人时候丢下去。循环丢下15人。但是这30人中有15人是基督教徒。上
帝不想教徒门丢下海。问:怎么排列才可以留下15个教徒。丢下其他的人,
用C来表示!。。小弟这里先谢谢大虾们了。。
高手进。。高高高手进!!
我是个才学C的家伙。今天遇到一道题。希望高手指教下。。高手再回贴,
题是这样的。在一条船上。坐了30人。准备过河。。但是人太多要丢下15个。
,每次都报数。到第9人时候丢下去。循环丢下15人。但是这30人中有15人是基督教徒。上
帝不想教徒门丢下海。问:怎么排列才可以留下15个教徒。丢下其他的人,
用C来表示!。。小弟这里先谢谢大虾们了。。
这个是用数组做的,偶没有测试,偶想方法应该可以吧....(在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;
}