(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 ...
随机推荐
- CDN 机制
CDN的全称Content Delivery Network,(缩写:CDN)即内容分发网络. CDN是一个经策略性部署的整体系统,从技术上全面解决由于网络带宽小.用户访问量大.网点分布不均而产生的用 ...
- SeaJS之shim插件:解决非cmd规范的插件与sea的区别
SeaJS 中的模块默认都遵守 CMD 规范,但现实中已存在大量普通 JavaScript 类库,比如 jQuery.Underscore 等.使用 shim 插件,可以将这些普通 JS 文件转换成 ...
- 如何优雅的设计 React 组件
作者:晓冬 本文原创,转载请注明作者及出处 如今的 Web 前端已被 React.Vue 和 Angular 三分天下,一统江山十几年的 jQuery 显然已经很难满足现在的开发模式.那么,为什么大家 ...
- java 中 针对数组进行的工具类
1.遍历数组的方法: public static void printfArray(int[] arr) 2. 获取数组中最大值: public static int getMax(int[] ar ...
- C#中制作MDI窗体
在VB中做 MDI窗体很简单.在C#里就没有这个轻松了,不过还是很方便的. 首先在C#里添加一个窗体,命名为MdiMain,将其IsMdiContainer设定成true,这样MDI主窗体就建立了.然 ...
- [转载] Dubbo架构设计详解
转载自http://shiyanjun.cn/archives/325.html Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合 ...
- Ext3和Ext4文件系统区别
inode http://www.cnblogs.com/itech/archive/2012/05/15/2502284.html Ex3使用15个inode查询数据块,前12个为直接数据块,直接指 ...
- 自动化之路 python psutil模块 收集硬件信息
一.psutil模块 1. psutil是一个跨平台库,能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等)信息.它主要应用于系统监控,分析和限制系统资源及进程的管理.它实现了 ...
- Python [习题] 文件操作:目录间copy 文件
[习题] 指定一个源文件,实现copy到目标目录.例如把/tmp/sample1.txt 拷贝到/tmp/sample2.txt原文件需要有读权限(默认rt权限),目标文件需要给写(w即可)权限. I ...
- 《java.util.concurrent 包源码阅读》22 Fork/Join框架的初体验
JDK7引入了Fork/Join框架,所谓Fork/Join框架,个人解释:Fork分解任务成独立的子任务,用多线程去执行这些子任务,Join合并子任务的结果.这样就能使用多线程的方式来执行一个任务. ...