45 lines
1.1 KiB
C
45 lines
1.1 KiB
C
/*-----------------------------------------------------------------------
|
||
【程序设计】
|
||
-------------------------------------------------------------------------
|
||
题目:键盘输入一个整数n,由这n 个人围成一圈,顺序排号。从第一个人开始报数
|
||
(从1 到3 报数),凡报到3 的人退出圈子,问最后留下的是原来第几号的那位
|
||
输入输出如下
|
||
【请输入整数n: 】99
|
||
最后留下的是原来第88 号的那位
|
||
-------------------------------------------------------------------------
|
||
注意:请勿改动程序中的其他内容,函数中所需变量根据需要自定义变量名。
|
||
------------------------------------------------------------------------*/
|
||
#include <stdio.h>
|
||
int josephus(int n)
|
||
{
|
||
/**********Program**********/
|
||
int a[n],i,count = 0,k=0;
|
||
i=n-1;
|
||
while(i>=0){
|
||
a[i]=1;
|
||
i--;
|
||
}
|
||
while(count<n){
|
||
if(a[i]!= 0){
|
||
k++;
|
||
if(k%3 == 0){
|
||
a[i] = 0;
|
||
count++;
|
||
}
|
||
}
|
||
i=(i+1)%n;
|
||
}
|
||
return i;
|
||
/********** End **********/
|
||
}
|
||
int main()
|
||
{
|
||
int n;
|
||
int result;
|
||
printf("【请输入整数n: 】");
|
||
scanf("%d", &n);
|
||
result = josephus(n);
|
||
printf("最后留下的是原来第%d 号的那位\n", result);
|
||
return 0;
|
||
}
|