合理利用continue是该题突破的重点 即解决《在报数时如何跳过已经退圈的位置》

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<math.h>
  4. #include<assert.h>
  5. int main()
  6. {
  7. int k=0, m, n;//k统计数到3,m统计剩余在圈内的元素个数,n为最初元素个数
  8. scanf("%d", &n);
  9. m = n;
  10. int a[30] = { 0 };
  11. a[0] = n;//a[0]设为n
  12. for (int i = 1; i < n; i++)//从a[1]开始一次1,2,3赋值
  13. {
  14. a[i] = i;
  15. }
  16. for (int i = 1; m >1; i++)//当圈内剩余1个的时候退出循环
  17. {
  18. if (a[i % n] == 0)
  19. {
  20. continue;//如果当前位置已经退圈,则继续for循环从下一个开始判断
  21. }
  22. k++;//当前元素在圈内 则数数+1
  23. if (k == 3)
  24. {
  25. a[i % n] = 0;//令k=3的值为0,表示退圈
  26. k = 0;
  27. m--;
  28. }
  29. }
  30. for (int j = 0; j < n; j++)
  31. {
  32. if (a[j] != 0)
  33. {
  34. printf("%d", a[j]);//将不等于0的数打印出来,
  35. }
  36. }
  37. }
点赞(0)
 

0 分

0 人评分

 

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论