赞
踩
问题:n个人围成一圈,顺序排号。从第一个人开始报数(从1报到3),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
例如;
input 8
output 7
解法一(指针):
#include<stdio.h>
int main ()
{
int n;
while(scanf("%d",&n))
{
int *p,i,a[50];
p=a;
for(i=0; i<n; i++)
*(p+i)=i+1; //从1到你n对每个人编号;
int k=0,m=0; //k为按1,2,3报时时的计数变量;m为退出计数变量;
i=0; //循环计数变量;
while(m<n-1) //当退出人数为n-1即未退出人数为一时结束循环体;
{
if(*(p+i)!=0) k++; //计数便于判断报数三;
if(k==3)
{
*(p+i)=0; //对退出人编号为0;
k=0; //计数变量及时归零;
m++; //退出人数的累加,便于循环的执行;
}
i++;
if(i==n) i=0; //报数到最后,i恢复到0;
}
while(*p==0) p++; //循环,直到*p!=0,结束循环,简单方便的输出最后结果;
printf("%d\n",*p);
}
return 0;
}
解法二(链表):
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。