<center><h2>1067: 顺序排号</h2><span class="green">Time Limit: </span>1 Sec <span class="green">Memory Limit: </span>128 MB
<span class="green">Submit: </span>213 <span class="green">Solved: </span>157
[<a target=_blank href="http://202.194.119.110/submitpage.php?id=1067">Submit</a>][<a target=_blank href="http://202.194.119.110/problemstatus.php?id=1067">Status</a>][<a target=_blank href="http://202.194.119.110/bbs.php?pid=1067">Web Board</a>]</center><h2>Description</h2><div class="content"><p>有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。</p></div><h2>Input</h2><div class="content"><p>初始人数n</p></div><h2>Output</h2><div class="content"><p>最后一人的初始编号</p></div><h2>Sample Input</h2><pre class="content"><span class="sampledata">3</span>
Sample Output
2
#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;
}
/*
* Copyright (c) 2012, 烟台大学计算机学院
* All rights reserved.
* 作 者: 刘同宾
* 完成日期:2012 年 12 月 05 日
* 版 本 号:v1.0
*
* 输入描述:
* 问题描述:有n个人围成一圈,顺序排号,从第一个人开始报数(从1~3报数),
* 凡报到3的人退出圈子,问最后留下的人原来排在第几号。
* 程序输出:
* 问题分析:略
* 算法设计:略
*/
#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;
}