天津车位价格:C语言难题????

来源:百度文库 编辑:神马品牌网 时间:2024/04/20 07:31:23
15个基督教和15个异教徒同乘一船航行。途中风浪很大,危险万状,领航人告诉大家,只有将全船人的一半投入海中,其余人始能幸免。大家赞成这个办法,并议定30人围成一圈,由第一人数起,挨个报数,每数到第9个人,便把他投入海中,循环进行,直到剩下第15个人为止,问如何排法,方使每次投海者皆是异教徒?
要求:把输入扩展到人数:N个基督教和M个异教徒的情况,数到第K个人,0<N,M,K<50,并把结果同时输出到文件:output.txt

这只是个简单的算法
我就直接说N个基督教和M个异教徒的情况吧,
数到K个人是指第K个人丢到海里
还是剩下K个人呢?
我就定义为
数到第K个人丢到海里,剩下n个人时停止吧
首先申请一个数组a[M+N-1]
再申请一个整型变量inumber = 0记录已经丢了多少人
还有一个整型m = 0记录数到了几号
初始化数组
for(i = 0;i <= M + N - 1,i++)//使数组中的值和序号够成循环,用来数数
{
a[i] = (i + 1) % (M + N);
}
while(inumber < M+N-n)//丢够了人就不再丢了
{
int itemp = 1;//记录有没有数到k个人
if(itemp < k)
{
m = a[m];
itemp++; //往后数一个人,到k个人的时候就不数了
}
a[m-1] = (m + 1) % (M + N);//丢掉第k个人后,重新排成圈
printf("%d",m + 1);//这些位置就是放异教徒的
inumber++;
}
具体程序自己写下吧
很简单的