(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 ...
随机推荐
- touch pointer
在早期的浏览器,输入的事件其实相对单纯,只有考虑到鼠标和键盘两种:而当时的鼠标事件,其实就是 click.mousedown.mouseup 等等的事件.但是当手机.平板开始流行时候,再移动装置上的主 ...
- C# Ioc容器Unity,简单实用
开头先吐槽一下博客园超级不好用,添加图片后就写不动字了,难道是bug 好进入正题,先来说下依赖注入,简单来说就是定义好接口,上层代码调用接口,具体实现通过配置文件方式去指定具体实现类. 首先我们需要通 ...
- python量化之路:获取历史某一时刻沪深上市公司股票代码及上市时间
最近开始玩股票量化,由于想要做完整的股票回测,因此股票的上市和退市信息就必不可少.因为我们回测的时候必须要知道某一日期沪深股票的成分包含哪些对吧.所以我们要把沪深全部股票的上市时间.退市时间全部都爬下 ...
- C#执行批处理命令
using System.Diagnostics ; using System.IO; private void btnRun_Click(object sender, EventArgs e) ...
- Unity学习资料
前段时间刚简单接触下Spring.net,刚会简单注入,最近接手一项目确是用的Unity,网上找了一些很好的教程资料 算是入门了,高手已经写的很好了,我就转个链接吧: Unity V3 初步使用 —— ...
- EAS(学生管理系统)初建
一.确定开发使用的技术 本次开发EAS示例网站,使用Servlet+JSP+MySQL技术,其中包括使用bootstrap工具完成简易前端页面设计.所有数据实体与数据关系皆用数 ...
- android引入百度地图之最简单的例子-HelloBaiDuMap
开发工具 我用的是eclipse,目前这是开发android用的最多的一个工具. 开发准备 首先需要在百度地图开发平台上下载所需要的文档和功能,由于最新版的3.0.0的不是很熟悉,我这里用的是稍旧一点 ...
- geotrellis使用(三十五)Cesium加载geotrellis TMS瓦片
前言 做任何事情都不是想象中的那么简单.好久没有更新技术博客了,跟最近瞎忙有很大关系,虽说是瞎忙也抽空研究了些技术. 主要是前端渲染,像原生的WebGL和Cesium.WebGL写了几篇博客,自我感觉 ...
- 如何用while循环输出十行十列变色★☆
输出十行十列星星 k = 0 #设置一个终止变量 while k < 10: i = 0 #设置一个满十换行变量 while i < 10: print('★',end='') i += ...
- 《java.util.concurrent 包源码阅读》22 Fork/Join框架的初体验
JDK7引入了Fork/Join框架,所谓Fork/Join框架,个人解释:Fork分解任务成独立的子任务,用多线程去执行这些子任务,Join合并子任务的结果.这样就能使用多线程的方式来执行一个任务. ...