试着修改以下代码: (1) 定义变量m、k,通过输入的方式决定;定义N,假设为10;定义数组a,长度为N=10; (2) 随机生成一个0~9的数begin,作为报数开始的人的编号; (3) For循环从begin开始遍历,为a【begin】赋值为‘1’ (4) If判断:当前的值为‘null’,break跳出循环; (5) Else if:循环过程中指针所指的人的编号是否为从begin起的第m个,如果是,为a【begin+m-1】赋值‘null’; (6) Else:编号每后移一位,赋值在前一位的基础上+1; (7) 把begin+m-1赋给location,记录退出的人的编号;输出该编号; (8) 下一轮循环的开始从编号begin+m开始,循环结束的条件是:a【报数开始的人的编号+k+1】==a【报数开始的人的编号】 #include<stdio.h> #include<stdlib.h> #include<time.h> #define N 10 int main() { int m,k,begin,i,location,j; char a[N]; printf("please input the number which makes people exit:\n"); scanf("%d",&m); printf("please input the amount of people remained\n",k); scanf("%d",&k); srand((unsigned int)time(NULL)); begin=rand()%10; for(j=begin;a[j+k+1]==a[j];j++) { for(i=0;i<N;i++) { if(i!=begin) { break; } a[i]='1'; if(a[i]=='\0') { break; } else if(i==begin+m-1) { a[i]='\0'; location=i; printf("the number of the exit people is:%d\n",location); } else a[i]=a[i]+1; begin=begin+m; } } return 0; }
时间: 2023-06-13 10:06:51 浏览: 61
c代码-结构体的测试学习
以下是修改后的代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
int main() {
int m, k, begin, location, i, j;
char a[N];
printf("Please input the number which makes people exit: ");
scanf("%d", &m);
printf("Please input the amount of people remained: ");
scanf("%d", &k);
srand((unsigned int)time(NULL));
begin = rand() % N;
for (i = 0; i < N; i++) {
a[i] = '1';
}
a[begin] = '0';
for (j = begin;;) {
if (a[j] == '\0') {
break;
}
for (i = 1; i <= k; i++) {
j = (j + 1) % N;
while (a[j] == '\0') {
j = (j + 1) % N;
}
}
a[j] = '\0';
location = j;
printf("The number of the exit people is: %d\n", location);
}
return 0;
}
```
修改说明:
1. 定义变量 m、k 和 begin,并通过输入的方式初始化。
2. 定义数组 a,长度为 N,并将所有元素初始化为 '1'。
3. 由于 begin 确定了报数开始的人的编号,所以将 a[begin] 的值改为 '0',表示该人已经退出。
4. 在 for 循环中,使用 j 来记录当前报数到第几个人了。如果 a[j] 的值为 '\0',表示该人已经退出,跳出循环。
5. 在 for 循环中,使用 i 从 1 到 k 循环,每次将 j 加 1。如果 a[j] 的值为 '\0',表示该人已经退出,则再将 j 加 1,直到找到下一个未退出的人。
6. 找到第 m 个未退出的人后,将其 a 数组中的值改为 '\0',表示该人已经退出。将 j 的值赋给 location,表示退出的人的编号。输出该编号。
7. 循环结束的条件是,a[begin + k + 1] 的值等于 a[begin] 的值。由于 begin 已经确定了,所以只需要判断 a[begin + k + 1] 的值是否等于 '0' 即可。
阅读全文