有n个人围成一圈,顺序排号,从第一个人开始报数(从1到3报数),凡是报到3的人退出圈子,问最后留下的是原来第几号的的那位。
#include
int main()
{
int a[20][20], n, i, j, b,m;
printf("请输入总人数:");
scanf_s("%d", &n);
for (i = 0;i < n;i++)
{
for (m = 0;m < n;m++)
{
if (m == i + 1) a[i][m] = 1;
else a[i][m] = 0;
}
}
for (i = 0;i < n;i++)
{
if (((i + 1) % 3 == 0)||a[i][m]==1 )
{
n = n - 1;
for (j = i;j < n;j++)
{
a[j][m] = a[j + 1][m];
}
}
else if (n <3)break;
}
for (i = 0;i < n;i++)
{
for (m = 0;m < 20;m++)
{
if (a[i][m] == 1) printf("剩下的人的次序是:%d", m);
}
}
return 0;
}
我的思路是用二维数组列坐标标识原本的次序,筛选完毕后输出m,求纠错,我自己看看不出来
你定义两个一样大小的数组就好了,n代表数组大小。你的二维数组用的让人看不懂
#include <stdio.h>
int main()
{
int a[100] = {0},n,out= 0;
scanf("%d",&n);
int i=0,c=1;
while(n-out>1)
{
if(a[i] == 0)
{
if(c%3==0)
{
a[i] = 1;
c=1;
out++;
}
else
c++;
}
i = (i+1)%n;
}
for(i=0;i<n;i++)
if(a[i] == 0)
printf("剩下的人的次序是:%d\n",i+1);
return 0;
}