69,368
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#define max 15
int main()
{
int i,k,n,m,num[max],*p;
printf("输入开始报数时总人数:");
scanf("%d",&n);//开始报数前的人数。
p=num;//指针指向数组第一位num[0]
for(i=0;i<n;i++)//把n个人进行编号为1—n。
*(p+i)=i+1;
printf("依次出圈的人的编号:");
i=0;k=0;m=0;
while(m<n-1)//m为圈外人数。
//如果设n=9,则循环只运行到m=7。为什么不是m<n???
{
if(*(p+i)!=0)//报数。
k++;
if(k==3)
{
printf("%d ",*(p+i));//按顺序依次输出出圈的人的编号。
*(p+i)=0;//对于出圈人数,其值置为0。
m++;//圈外人数加1。
k=0;//重新开始报数。
}
i++;//指针指向下一位。
if(i==n)//指针移到最后一位时,重新赋值
i=0;//printf("\n");
}
for(i=0;i<n;i++)//输出最后一位出圈的人的编号
if(*(p+i)!=0)
printf("\n最后一位出圈的人的编号:%d\n",*(p+i));
return 0;
}
#include <stdio.h>
int main()
{
int a[100];
int n;
int i;
int count;
int j=0;
int index=0;
scanf("%d",&n);
for(i=0;i<n;i++)
a[i]=i+1;
for(i=0,count=1;(n-index)!=1;i=(i+1)%(n-index),count++)
{
if(count%3==0)
{
for(j=i;j<n-index;j++)
a[j]=a[j+1];
count++; //判断是否是3(被3整除)
index++; //index记录淘汰了几个数
}
}
printf("%d\n",a[0]);
return 0;
}
#include <stdio.h>
int main()
{
int a[100];
int n;
int i;
int count;
int j=0;
int index=0;
scanf("%d",&n);
for(i=0;i<n;i++)
a[i]=i+1;
for(i=0,count=1;(n-index)!=1;i=(i+1)%(n-index),count++)
{
if(count%3==0)
{
for(j=i;j<n-index;j++)
a[j]=a[j+1];
count++; //判断是否是3(被3整除)
index++; //index记录淘汰了几个数
}
}
printf("%d\n",a[0]);
return 0;
}