博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
杭电Problem 1276 士兵队列训练问题
阅读量:7259 次
发布时间:2019-06-29

本文共 1377 字,大约阅读时间需要 4 分钟。

士兵队列训练问题

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 5451    Accepted Submission(s): 2513


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

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

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

Sample Input
 
2 20 40
 

Sample Output
 
1 7 19 1 19 37
 
#include 
#include
#include
using namespace std;const int INF = 999999;int sq[5005];bool cmp(int x, int y){ return x < y;}int main(){ int Case, n; while(scanf("%d", &Case) != EOF) { while (Case--) { scanf("%d", &n); if(n <= 3) { printf("1"); for(int i = 2; i <= n; i++) printf(" %d", i); printf("\n"); continue; } for (int i = 0; i <= n; i++) { sq[i] = i; } for (int i = 1; sq[4] != INF; i++) { if (i % 2 == 1) { for (int j = 2; j < n; j+=2) { sq[j] = INF; } } else { for (int j = 3; j < n; j+=3) { sq[j] = INF; } } sort(sq,sq + n,cmp); } for (int i = 1; sq[i] != INF; i++) { if (sq[i + 1] == INF) { printf("%d\n", sq[i]); } else printf("%d ", sq[i]); } } } return 0;}

转载于:https://www.cnblogs.com/cniwoq/p/6770974.html

你可能感兴趣的文章
#308 (div.2) A. Vanya and Table
查看>>
&#39;hibernate.dialect&#39; must be set when no Connection available
查看>>
证明哈夫曼编码是最优的
查看>>
iOS消息机制
查看>>
bootstrap基础学习二篇
查看>>
Java抽象类与接口的区别
查看>>
数值的整数次方
查看>>
Simple Factory (简单工厂模式)
查看>>
VSCode+Ionic+Apache Ripple开发环境搭建
查看>>
android账号与同步之同步实现
查看>>
Linux内核【链表】整理笔记(2) 【转】
查看>>
文件管理系统-备
查看>>
linux配置oracle11G监听及本地网络服务 及 数据库建库
查看>>
利用linux的mtrace命令定位内存泄露(Memory Leak)
查看>>
netty 实现socket服务端编写
查看>>
软件设计方案
查看>>
重新安装系统之前备份
查看>>
linux定时任务的设置 crontab 配置指南
查看>>
mysql 一些基础的语法和命令
查看>>
imx6dl i2c4 support
查看>>