士兵队列训练问题

Title Description
某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数。。。,以后从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。

Input
本题有多个测试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000。

Output
共有N行,分别对应输入的新兵人数,每行输出剩下的新兵最初的编号,编号之间有一个空格。

Sample Input

2
20
40

Sample Output

1 7 19
1 19 37

思路:

运用队列的思想,想象士兵站成一个圈。就像约瑟夫环。同样的思想。

AC代码:

#include<stdio.h>
#include<string.h>
int main()
{int t,n,i;while(~scanf("%d",&t))  //多组输入{while(t--)          //t组输入{int x=0;        //计数器用来记是否为最后一个,如过时换行,不是就打一个空格(格式要求)int k=1;        //用来判断是叫到2的人出列还是3出列,我定义的是k=1时喊二出列,-1时喊三出列int a[5050]={0};   //定义一个数组存士兵出列情况,判断是否出列,将出列的赋值为1,没出列的赋值为0scanf("%d",&n);int cnt=n;         //士兵人数//前三中有点特殊需要单独判断,直接判断输出即可,剩下的再进行判断if(n==1){printf("1\n");continue;}else if(n==2){printf("1 2\n");continue;}else if(n==3){printf("1 2 3\n");continue;}else{while(1)    //定义一个死循环,后面写一个跳出循环的条件就,人数小与等于3{x=0;for(i=1;i<=n;i++){if(k==1)    //喊2的时候{if(a[i]==0){x++;}if(x==2){a[i]=1; //出列士兵记录cnt--;  //士兵人数减一x=0;}}if(k==-1)   //喊3的时候{if(a[i]==0){x++;}if(x==3){a[i]=1; //出列士兵记录cnt--;  //士兵人数减一x=0;}}}k=-k;   //题目中说一轮3一轮2,在这是交换if(cnt<=3)  //人数小于等于3时跳出循环{break;}}}x=0;for(i=1;i<=n;i++){if(a[i]!=1){if(x!=0)       // !0时输出空格printf(" ");printf("%d",i);x++;            }}printf("\n");}}return 0;
}

士兵队列训练问题/队列/C语言表达相关推荐

  1. 士兵队列训练问题(队列)

    士兵队列训练问题 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的 ...

  2. 士兵队列训练问题 (队列 c++)

    士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  3. hdoj 1276 士兵队列训练问题 模拟队列

    士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  4. 士兵队列训练问题(队列+超详细解析)

    士兵队列训练问题 HDU - 1276 目录 士兵队列训练问题 HDU - 1276 题意描述:输入的新兵人数,按照先报1.2,将2出列:接着按1.2.3报数,将3出列.重复上述循环,直到所剩人数不超 ...

  5. dhu 4.1 队列模板简单应用算法设计:士兵队列训练

    队列模板简单应用算法设计:士兵队列训练 时间限制: 1S类别: DS:队列->队列定义及应用 晚于: 2022-05-04 23:55:00后提交分数乘系数50% 截止日期: 2022-05-0 ...

  6. 1276 士兵队列训练问题【队列模拟】

    士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  7. HDU1276 士兵队列训练问题【模拟+array+vector+list】

    士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  8. HDUOJ士兵队列训练

    ** HDUOJ1276士兵队列训练 ** 士兵队列训练问题 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方 ...

  9. 士兵队列训练问题 HDU - 1276

    题目 士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

最新文章

  1. 初学者python编辑器-分享|Mu 入门:一个面向初学者的 Python 编辑器
  2. 信息革命的新世界正在到来,连睡觉都觉得浪费
  3. PHP——PHP读取MySQL数据库中文乱码解决方案
  4. 如何通过BBED找回删除数据
  5. Mysql怎么把8位数变成日期_SQL中如何将数字型转换为日期型
  6. 找一个程序猿男盆友是一种怎样的体验
  7. 数据库基本常用类型解析
  8. python#原创第13篇~while循环+答案
  9. monkey操作,获取包名,参数,日志,百分比
  10. Java StringTokenizer类使用方式
  11. 解决打印机共享提示:你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问
  12. 学习plc编程经验分享
  13. 如何使用Linux匿名上网-四大法宝
  14. MIUI12_Global未知来源安装等待时间patcher
  15. Linux 4G/5G 驱动移植、实践测试记录
  16. Javascript(十三)javascript BOM详解
  17. 5个增加设计趣味性的方法
  18. 插曲(1)dht11的连接
  19. win10计算机亮度无法调节,Win10电脑无法调节亮度怎么办 Win10系统不能调节屏幕亮度解决方法...
  20. 原码一位乘法(2020-03-27)

热门文章

  1. 大学生的小乐趣:HTML制作MacOS Dock栏
  2. Qt exe图标和窗口图标设置
  3. P8311 [COCI2021-2022#4] Autići
  4. 2011最新QQ大盗使用教程
  5. CentOS是什么服务器系统
  6. 使用图形制作C语言的模拟时钟
  7. PDFgetXPDFgetN 软件分享
  8. Altair HyperWorks Solvers 14.0.211 HotFix Win64 Linux64 2CD
  9. android textview 楷体,Android自定义控件之自定义Text,画出米字格-FenGKun
  10. 你知道卷积是如何发挥作用的吗?使用opencv4 解剖卷积功能