士兵队列训练问题/队列/C语言表达
士兵队列训练问题
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语言表达相关推荐
- 士兵队列训练问题(队列)
士兵队列训练问题 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的 ...
- 士兵队列训练问题 (队列 c++)
士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- hdoj 1276 士兵队列训练问题 模拟队列
士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- 士兵队列训练问题(队列+超详细解析)
士兵队列训练问题 HDU - 1276 目录 士兵队列训练问题 HDU - 1276 题意描述:输入的新兵人数,按照先报1.2,将2出列:接着按1.2.3报数,将3出列.重复上述循环,直到所剩人数不超 ...
- dhu 4.1 队列模板简单应用算法设计:士兵队列训练
队列模板简单应用算法设计:士兵队列训练 时间限制: 1S类别: DS:队列->队列定义及应用 晚于: 2022-05-04 23:55:00后提交分数乘系数50% 截止日期: 2022-05-0 ...
- 1276 士兵队列训练问题【队列模拟】
士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- HDU1276 士兵队列训练问题【模拟+array+vector+list】
士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- HDUOJ士兵队列训练
** HDUOJ1276士兵队列训练 ** 士兵队列训练问题 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方 ...
- 士兵队列训练问题 HDU - 1276
题目 士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
最新文章
- 初学者python编辑器-分享|Mu 入门:一个面向初学者的 Python 编辑器
- 信息革命的新世界正在到来,连睡觉都觉得浪费
- PHP——PHP读取MySQL数据库中文乱码解决方案
- 如何通过BBED找回删除数据
- Mysql怎么把8位数变成日期_SQL中如何将数字型转换为日期型
- 找一个程序猿男盆友是一种怎样的体验
- 数据库基本常用类型解析
- python#原创第13篇~while循环+答案
- monkey操作,获取包名,参数,日志,百分比
- Java StringTokenizer类使用方式
- 解决打印机共享提示:你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问
- 学习plc编程经验分享
- 如何使用Linux匿名上网-四大法宝
- MIUI12_Global未知来源安装等待时间patcher
- Linux 4G/5G 驱动移植、实践测试记录
- Javascript(十三)javascript BOM详解
- 5个增加设计趣味性的方法
- 插曲(1)dht11的连接
- win10计算机亮度无法调节,Win10电脑无法调节亮度怎么办 Win10系统不能调节屏幕亮度解决方法...
- 原码一位乘法(2020-03-27)
热门文章
- 大学生的小乐趣:HTML制作MacOS Dock栏
- Qt exe图标和窗口图标设置
- P8311 [COCI2021-2022#4] Autići
- 2011最新QQ大盗使用教程
- CentOS是什么服务器系统
- 使用图形制作C语言的模拟时钟
- PDFgetXPDFgetN 软件分享
- Altair HyperWorks Solvers 14.0.211 HotFix Win64 Linux64 2CD
- android textview 楷体,Android自定义控件之自定义Text,画出米字格-FenGKun
- 你知道卷积是如何发挥作用的吗?使用opencv4 解剖卷积功能