13个人围成一圈,从第1个人开始顺序报号1、2、3,凡报到3的人退出圈子。找出最后留在圈子里的人原来的序号。要求用结构体编程实现。
输出提示 “出圈成员及顺序:” 格式 “%3d”
输出提示 “\n最后的成员是:” 格式 “%3d”
程序的运行示例如下:
出圈成员及顺序: 3 6 (后面以此类推,抱歉这里的输出结果保密,暂不公开,注意最后一个人是不出圈的哦)
最后的成员是: (抱歉这里的输出结果保密,暂不公开)
#include<stdio.h>
struct person
{
int name; //这个人的出场位置
int count;
};
int main()
{
struct person arr[13] = {
0};
int i, k = 1, n = 0; //k是用于报数的计数器,n是退出圈子的总人数
while (n != 12) //剩下一个人时退出循环
{
for (i = 0; i < 13; i++)
{
if (arr[i].count != 3) //没有退出圈子的人才报数
{
arr[i].count = k;
k++;
}
if (k == 4) //k==4,说明arr[i]这个人报数为3
{
arr[n].name = i + 1; //n为出队的顺序,i + 1是出队这个人的位置
k = 1;
n++;
}
}
}
printf("出圈成员及顺序:");
for (i = 0; i < 13; i++)
{
if (arr[i].count == 3)
printf("%3d", arr[i].name);
}
printf("\n最后的成员是:");
for (i = 0; i < 13; i++)
{
if (arr[i].count != 3)
{
arr[i].name = i+1;
printf("%3d", arr[i].name);
}
}
}