编程题:约瑟夫生者死者小游戏
30 个人在一条船上,超载,需要 15 人下船。
于是人们排成一队,排队的位置即为他们的编号。
报数,从 1 开始,数到 9 的人下船。
如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?
#include <stdio.h>
void main()
{
int a;
scanf("输入船上的总人数:%d",&a);
int sun_people[a+1];
int k=0; // 用作标记淘汰的个数
for(int i=1;i<=a;i++) sum_people[i]=i; // 先为数组赋值,以此作为编号
for(int j=1;j!=0;j++)
for(int i=1;i<=a-1;i++)
if(i%9==0)
printf(i); k++;
if(sun_people[i+k]==null) continue;
sun_people[i]=sun_people[i+k];
}
if((((fioat)a)-k)==(((fioat)a)/2)) break; //每次循环结束,判断船上是否剩余总人数的一半,用浮点数判断
1
int array[30]={0}; int counter=0; //存储出去的人数 int number=0; //存储当前数到的数 int index=0; while(counter<15) //counter==15的时候结束循环 { if(!(index<30)) { index=0; } if(array[index]==0) { number++; if(number==9) { array[index]=1; number=0; counter++; cout<<index+1<<endl; } } index++; }
#include<iostream> using namespace std;
int main() { int array[30]={0};
int counter=0; int terminator=15;
while(terminator) {
for(int i=0;i<30;i++) { if(array[i]==0) { counter++; if(counter==9) { array[i]=1; terminator--; counter=0; cout<<i+1<<endl; } } }
#include<std...
用户登录可进行刷题及查看答案
#include<stdio.h> int c = 0; int i = 1; int j = 0; int a[30] = { 0 }; int b[30] = { 0 }; int main() { while (i<=31) { if (i == 31) { i = 1; } else if (c == 15) { break; } else { if (b[i] != 0) { i++; continue; } else { j++; if (j != 9) { i++; continue; } else { b[i] = 1; a[i] = j; j = 0; printf("第%d号下船了\n", i); i++; c++; } } } } }
登录后提交答案