(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
2 |
|
Sample Output
1 7 19 |
|
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 ...
随机推荐
- 数据库Oracle
一. 表空间和数据文件的关系: 文件组成:数据文件,控制文件,数据库日志文件 数据文件:.dbf 包含全部数据库数据(表,索引等),一个数据文件仅与一个数据库关联.一旦建立,只增不减. 表空间(Tab ...
- android wear开发:为可穿戴设备创建一个通知 - Creating a Notification for Wearables
注:本文内容来自:https://developer.android.com/training/wearables/notifications/creating.html 翻译水平有限,如有疏漏,欢迎 ...
- Boost LRU-Cache使用方法简介
缓存是提高系统运行效率的常用组件,可以将"有效的"业务数据直接返回用户,避免繁琐的计算过程.除了Redis.MemCache等常用缓存系统,应用程序内部也可以根据需要设置一定容量的 ...
- 解决mssql localdb 中文乱码问题
使用以下查询语句即可. alter database "E:\.Net Core\Database\hm.mdf" set single_user with rollback im ...
- 堆排序HeapSort
堆排序,顾名思义,是采用数据结构堆来进行排序的一种排序算法. 研究没有规律的堆,没有任何意义.特殊的堆有最大堆(父节点值大于等于左右字节点值),最小堆(父节点值小于等于子节点值).一般采用最大堆来进行 ...
- Spring MVC工作原理
1. 客户端请求提交到DispatcherServlet2. 由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller3. Dispat ...
- 69、django之Form组件
本篇导航: 小试牛刀 Form类 常用选择插件 自定义验证规则 初始化数据 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次 ...
- C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
一.引言 今天我们开始讲"行为型"设计模式的第三个模式,该模式是[迭代器模式],英文名称是:Iterator Pattern.还是老套路,先从名字上来看看."迭代器模 ...
- sklearn的简单使用
import numpy as np from sklearn import datasets from sklearn.cross_validation import train_test_spli ...
- 最耗性能的SQL语句
设计优化–常见杀手级SQL •SELECT * vsSELECT col1, col2 •ORDER BY RAND() •LIMIT huge_num, offset •SELECT COUNT(* ...