标签:
题目:设n个人围坐在一圆桌周围,依次编号为1,2,...,n,从第s个人从1开始依次报数,数到m的人出列,然后从出列的下一个人重新开始报数,数到m的人又出列,…,如此反复直到只剩一人为止为止。对于任意给定的n,s和m,输出按出列次序得到的n个人员的序列。
代码如下:
#include<stdio.h>int a[100]; void dele(int x,int t) //定义数组删除元素函数 { int j; if(x==t) a[x]=0; for(j=x;j<=t;j++) { a[j]=a[j+1]; a[t+1]=0; } } void jose(int n,int m) { int i,len,cycle; //len表示当前数组的长度,cycle表示当前报数人报出的数。 for(i=1;i<=n;i++) a[i]=i; cycle=1; len=n; i=1; while(len>1) { if(i>len) { i=0; cycle--; } if(cycle==m) { dele(i,len); len--; if(i>len) //删除当前元素后,当前位置已经没有元素。 { cycle=0; } else { cycle=1; } } i++; cycle++; } } int main() { int s1,s2; scanf("%d %d",&s1,&s2); if(s1>0&&s2>0) { if(s2==1) printf("%d\n",s1); else if(s2>1) { jose(s1,s2); printf("%d\n",a[1]); } scanf("%d %d",&s1,&s2); } return 0; }
标签:
原文地址:http://www.cnblogs.com/linzb1993/p/4593868.html