(hdu step 8.1.6)士兵队列训练问题(数据结构,简单模拟——第一次每2个去掉1个,第二次每3个去掉1个.知道队伍中的人数<=3,输出剩下的人 )
题目:
士兵队列训练问题 |
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) |
Total Submission(s): 56 Accepted Submission(s): 37 |
Problem Description
某部队进行新兵队列训练,将新兵从一開始按顺序依次编号,并排成一行横队。训练的规则例如以下:从头開始一至二报数。凡报到二的出列,剩下的向小序号方向靠拢,再从头開始进行一至三报数。凡报到三的出列,剩下的向小序号方向靠拢,继续从头開始进行一至二报数。。。。以后从头開始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。
|
Input
本题有多个測试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000。
|
Output
共同拥有N行,分别相应输入的新兵人数,每行输出剩下的新兵最初的编号。编号之间有一个空格。
|
Sample Input
|
Sample Output
|
Author
Cai Minglun
|
Source
杭电ACM集训队训练赛(VI)
|
Recommend
lcy
|
题目分析:
简单模拟。这道题可能对输入例子怎么得到输出例子的有点疑惑。下面是自己的一些理解:
代码例如以下:
- /*
- * f.cpp
- *
- * Created on: 2015年3月19日
- * Author: Administrator
- */
- #include <iostream>
- #include <cstdio>
- using namespace std;
- const int maxn = 5001;
- int soldier[maxn];
- int main() {
- int t;
- scanf("%d", &t);
- while (t--) {
- int n;
- scanf("%d", &n);
- int i;
- for (i = 1; i <= n; ++i) {
- soldier[i] = i;
- }
- int cnt = 0;
- int sum = n;
- if (sum <= 3) {
- int j;
- int flag = 1;
- for (j = 1; j <= n; ++j) {
- if (flag == 1) {
- flag++;
- printf("%d", soldier[j]);
- } else {
- printf(" %d", soldier[j]);
- }
- }
- printf("\n");
- continue;
- }
- while (true) {//当队伍中的人数>3的时候不断地循环
- int j;
- for (j = 1; j <= n; ++j) {//第一次每两个去掉一个
- if (soldier[j] != 0) {
- cnt++;
- if (cnt == 2) {
- cnt = 0;
- soldier[j] = 0;
- sum--;
- }
- }
- }
- //假设经历完每两个去掉一个后,队伍中的人数已经<=3
- if (sum <= 3) {
- break;//则跳出循环
- }
- //能运行下面代码证明队伍中的人数还没有<=3
- cnt = 0;//将计数器中的清0
- for (j = 1; j <= n; ++j) {//第二次每3个去掉一个
- if (soldier[j] != 0) {
- cnt++;
- if (cnt == 3) {
- cnt = 0;
- soldier[j] = 0;
- sum--;
- }
- }
- }
- if (sum <= 3) {//假设经历每3个去掉一个后,队伍中的人数已经<=3
- break;//则跳出循环
- }
- //假设还能运行下面代码,那么证明队伍中的忍术还没有<=3
- cnt = 0;//将计数器清0
- }
- //把最后剩下的人输出来
- int flag = 1;
- for (i = 1; i <= n; ++i) {
- /**
- * 要注意对数据输出格式的处理.
- * 输出格式要严格遵循x_x_x_x的形式( _表示一个空格 )
- * 不要输出成x_x_x_x_ ,这样会PE
- */
- if (soldier[i] != 0) {
- if (flag == 1) {//第一个数据不须要输出空格,即输出"x"形式的数据就可以
- flag++;
- printf("%d", soldier[i]);
- } else {//假设不是第一项数据
- printf(" %d", soldier[i]);//输出"_x"形式的数据
- }
- }
- }
- printf("\n");
- }
- return 0;
- }
(hdu step 8.1.6)士兵队列训练问题(数据结构,简单模拟——第一次每2个去掉1个,第二次每3个去掉1个.知道队伍中的人数<=3,输出剩下的人 )的更多相关文章
- HDU 4509 湫湫系列故事——减肥记II (简单模拟)
题意:一天一共有1440分钟,主人公每天有n件事要做,给出这n件事开始跟结束的时间,然后让你求出,空闲的时间的总分钟数是多少. 解题报告:简单模拟,只要开个一维数组标记那个每个分钟是否是有事的就可以了 ...
- HDU 1276 士兵队列训练问题(队列)
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1276 题目: 士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Othe ...
- HDU 1276 士兵队列训练问题(模拟)
原题代号:HDU 1276 原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1276 题目原题: 士兵队列训练问题 Time Limit: 2000/10 ...
- 解题报告:hdu 1276 士兵队列训练问题 - 简单题
Problem Description 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行 ...
- ACM学习历程—HDU 1276 士兵队列训练问题(队列)
Description 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠 拢,再从头开始进行一至三报数,凡 ...
- 暑假集训(1)第一弹 -----士兵队列训练问题(Hdu1276)
Description 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报 ...
- hdoj 1276 士兵队列训练问题【模拟】
士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- HDU1276(士兵队列训练模拟与链表)
HDU1276 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descripti ...
- A - 士兵队列训练问题
A - 士兵队列训练问题 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit ...
随机推荐
- ⑾bootstrap组件 徽章 大屏 页头 基础案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Problem E: 分数类的输出
Problem E: 分数类的输出 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 2699 Solved: 1227[Submit][Status][ ...
- python jason,pickle
参考官网 https://docs.python.org/3/library/json.html https://docs.python.org/3/library/pickle.html 了解这两个 ...
- Mybatis框架的搭建和基本使用方法
1.1MyBatis的下载 最新yBatis可以在github官网上下载: https://github.com/mybatis/mybatis-3 1.2 Mybatis Jar包 1.3MyBat ...
- linux C/C++开发环境搭建指南
一.安装基本开发环境 1.配置GCC 刚装好的系统中已经有GCC了,但是这个GCC什么文件都不能编译,因为没有一些必须的头文件,所以要安装build-essential这个软件包,安装了这个包会自动安 ...
- asp.net web api 文件上传
1正确的做法 public class AvaterController : BaseApiController { [HttpPost] public async Task<IHttpActi ...
- java之JVM学习--基本机构
JDK,JRE,JVM关系图 JVM物理结构: jvm内存区详解: 程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看做是当前线程所执行的字 ...
- 打印中文dict list的各种姿势
在开发过程中,我们经常需要打印一些变量的值,便于调试.这个时候就会发现如果在dict list这些容器中,如果包含中文字符,不管是str类型,还是unicode类型,都打印不出来.如下: >&g ...
- PHP截取带有汉字的字符串,将汉字按两个字节计算
<?php header("Content-type:text/html;charset=utf-8"); /** *截取字符串,汉字占两个字节,字母占一个字节 *页面编码必 ...
- configpraser模块
configpraser配置文件,example.conf [data] #节点 username = Jason password = 123 [public] comment = stuff pu ...