题目:有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位. 提示:用数组完成

来源:互联网 发布:windows xp是什么系统 编辑:程序博客网 时间:2024/06/05 23:44
#include<stdio.h>
int main()
{
int i,q,p,n,a[100],w=0;
scanf("%d",&n);
q=n;
for(i=0;i<n;i++)
a[i]=i+1;
i=0;p=0;


while(1)
{

if(a[i]!=0)
p++;
if(p==3)
{
a[i]=0;
w++;
p=0;
}
i++;
if(i==n)i=0;
if(w==q-1)break;
}




for(i=0;i<n;i++)
if(a[i]!=0)
printf("%d",a[i]);
return 0;

}

这样就可以运行了。这只是其中一种比较适合初学者,还有几种,这边分享给你们:


#include<iostream>    using namespace std;    int main()  {      int num[50];        int i,j,k,m,n;        int *p;        cout<<endl<<"请输入总人数:"<<endl;        cin>>n;        p=num;        for(i=0;i<n;i++)      {          *(p+i)=i+1;   //以1至n为序,给每个人编号      }        i=0;    //i为每次循环时计数变量        k=0;    //k为按1 2 3报数时的计数变量        m=0;    //m为退出人数        while(m<n-1)  //当退出人数比n-1少时(即未退出人数大于1时)执行循环体      {          if(*(p+i)!=0)          {              k++;          }            if(k==3)    //将退出人的编号置为0          {              *(p+i)=0;                k=0;                m++;          }            i++;            if(i==n)          {              i=0;//报数到尾后i恢复为0          }      }        while(*p==0)      {          p++;      }        cout<<"最后一个是"<<*p<<" 号!"<<endl;        return 0;  }  

一种比较叼的:


#include <stdio.h>  int M = 3; int main() {     int n, s = 0;     scanf("%d", &n);     for (int i = 2; i <= n; ++i)         s = (s+M)%i;     printf("%d\n", s+1);     return 0; }

阅读全文
0 0