解题思路:
创建一个数组盛放报数人序号,报完数后未被pass的人,其序号被扩充到数组结尾等待下次报数
注意事项:
参考代码:
#include<stdio.h> #include<stdlib.h> int main(){ int *num; //创建数组盛放报数的序号 int n,i=1,j,m; //n为参与报数的人数,m是数组长度,i用于依次遍历数组下标,报数为3的人下标是3的倍数 scanf("%d",&n); j=n+1; //j用于盛放每一次报数后未被pass的人的序号 m=2*n; //数组长度初始化,这里初始为人数的2倍 num=(int *)calloc(m,sizeof(int)); for(i=1;;i++){ if(j==m){ m+=10; //当报数的次数达到数组长度时,扩充10个数组长度 num=(int *)realloc(num,m*sizeof(int)); } if(i<=n){ //前n+1个数的下标就是报数人的序号 if(i%3!=0){ num[j]=i; j+=1; } } else{ if(i%3!=0){ num[j]=num[i]; //从j开始下标大于总人数了,所以用数组内容记录报数人的序号 j+=1; } } if(j-i==1) //报数人报完数就要被扩充时,说明是最后报数人,游戏结束 break; } printf("%d",num[i]); free(num); num=NULL; return 0; }
0.0分
0 人评分
字符串的输入输出处理 (C语言代码)浏览:711 |
C语言程序设计教程(第三版)课后习题6.7 (C语言代码)浏览:778 |
C语言程序设计教程(第三版)课后习题10.7 (C语言代码)浏览:556 |
C语言训练-字符串正反连接 (C语言代码)浏览:664 |
矩形面积交 (Java代码)浏览:1281 |
WU-输出九九乘法表 (C++代码)浏览:1853 |
WU-判定字符位置 (C++代码)浏览:1471 |
C语言程序设计教程(第三版)课后习题11.1 (C语言代码)浏览:651 |
1014题解浏览:524 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:537 |