|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
有N个人围成一圈,(假设的编号沿顺时针方向依次为1到N),编程序,
使用数组来存放数据(人员编号),而后从1号人员开始数起(沿顺时针方向). 当数到M 时(M>1由用户输入),该号人员被"淘汰出局";接着仍沿着顺时针方向从淘汰者的下一人员重新从1开始数起,数到M后,淘汰第二个人;如此继续,直到最后剩下一人为止。请输出被"淘汰"的人的编号,及最后剩下一个人的编号。
另外一种指针代码: - #include <stdio.h>
- void game(int arr[], int *res, int N, int M){
- for(int i = 0, m = 1, n = 0;;i++, i %= N){
- if(!(arr[i])) continue;
- else{
- if(m == M){
- *res++ = arr[i]; // 用指针赋值
- arr[i] = m = 0;
- n++;
- }
- m++;
- }
- if(n == N) break;
- }
- }
- int main()
- {
- int N, M;
- scanf("%d%d", &N, &M);
- int arr[N], res[N];
- for(int i = 0; i < N; i++) arr[i] = i+1;
- for(size_t i = 0; i < N; i++) printf("%d ", arr[i]); printf("\n");
- game(arr, res, N, M);
- for(size_t i = 0; i < N-1; i++) printf("%d ", res[i]);
- printf("\n%d", res[N-1]);
- return 0;
- }
复制代码
|
|