问题描述:
30 个人在一条船上,超载,需要 15 人下船。
于是人们排成一队,排队的位置即为他们的编号。
报数,从 1 开始,数到 9 的人下船。
如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?
解题思路:
该问题中有两个状态,上船与下船,因此需要对这两个状态分别进行标记,常用的即0与1,另需一个记数变量来结束循环,剩余15人为止。另需一变量来表示报数值,并当报数值为9的时候进行状态更改 *** 作。
给30个人编号1-30,使用数组a[30]={0}表示,用于存储每个人的报数值;
使用数组b[30]={0}标记每个人的状态,即在船上还是船下,,这里将每个人的初值标记为0(表示在船上)1表示下船;
i代表他们的编号,当i等于31时,手动将i置为1;
c代表被扔下船的人数(c=15时循环结束);
变量j用来记数,j=9时将对应编号i的人置 0(扔下船)并让j重新记数。
#include
int c = 0;//c代表被扔下船的人数
int i = 1;
int j = 0;
int a[30] = { 0 };
int b[30] = { 0 };
int main()
{
while (i<=31)
{
if (i == 31)//当i等于31时,手动将i置为1
{
i = 1;
}
else if (c == 15)//c=15时跳出循环,循环结束
{
break;
}
else
{
if (b[i] != 0)//b[i]为1时,表示此人已下船,i加1,check不增加,继续循环
{
i++;
continue;
}
else
{
j++;
if (j != 9)
{
i++;
continue;
}
else //j=9时将对应编号i的人标记为1,并记录其报数值9
{
b[i] = 1;
a[i] = j;
j = 0;
printf("第%d号下船了\n", i);
i++;
c++;
}
}
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)