2017/7/17

二:

士兵队列训练问题

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

Input本题有多个测试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000。 
Output共有N行,分别对应输入的新兵人数,每行输出剩下的新兵最初的编号,编号之间有一个空格。
Sample Input

2
20
40

Sample Output

1 7 19
1 19 37

分析:报到2,报到3分别表示可以被2,3整除,刚开始以为是数字中包含2,3.要剔除2,3,然后重排,最后要输出原来的编号。思路:用三个数组来储存用a[i]来代表最初的数据,其实数组的下标i就是原来的编号用b[i]代表是否是2,3的因子,是储存为1,否储存为0用两个变量来储存总人数n代表最开始的人数t代表实时的人数(变化的)最后吧b[i]==1的赋值给d[i]

源代码:

#include <iostream>

using namespace std;

#include <stdio.h>

#include <math.h>

int a[5001],b[5001];

int main()

{

int T,n,i,j,k,t,d[4];

scanf("%d",&T);

while(T--)

{

scanf("%d",&n);

//n=T;

for(i=1;i<=n;i++)//i表示最初的编号

{

a[i]=i;//初始化排队

b[i]=1;//全部初始化为1

}

t=n;//因为这里面的n会在计算中发生变化,所以要重新赋值,用另一个变量代替它发生变换!

if(n>3)//当n>3的时候,因为需要出列,所以按照题意执行就可以了,记住,执行过之后

for(j=1;j<=n;j++)//士兵的顺序不发生改变,但是序号值发生了变化!,所以在他们每出列一次要重新

{

for(i=1,k=0;i<=n;i++)//给士兵进行赋值操作!但是最后需要输出原来的数组编号!

{

if(a[i]%2==0&&b[i])//这并不难,因为标记数组的下标你又没有发生改变,所以到时候将数组b中对应是1的元素的下标输出来就行了!

{

b[i]=0;//把符合条件的赋值为0

t--;

}

else if(b[i])//把不被整除的重新编号

{

k++;

a[i]=k;

}

}

if(t<=3)//t==n,人数小于3直接输出

break;

for(i=1,k=0;i<=n;i++)

{

if(a[i]%3==0&&b[i])

{

b[i]=0;

t--;

}

else if(b[i])

{

k++;

a[i]=k;

}

}

if(t<=3)

break;

}

for(i=1,j=0;i<=n;i++)//因为题上格式要求比较严格,所以我们要进行赋值到一个数组中,进行

{

if(b[i])//比较规格的输出!

d[j++]=i;//j比i小1

}

if(t==3)

printf("%d %d %d\n",d[0],d[1],d[2]);

else if(t==2)

printf("%d %d\n",d[0],d[1]);

else if(t==1)

printf("%d\n",d[0]);

}

return 0;

}

				
时间: 2024-10-13 10:58:18

2017/7/17的相关文章

2017.9.17校内noip模拟赛解题报告

预计分数:100+60+60=220 实际分数:100+60+40=200 除了暴力什么都不会的我..... T1 2017.9.17巧克力棒(chocolate) 巧克力棒(chocolate)Time Limit:1000ms Memory Limit:64MB题目描述LYK 找到了一根巧克力棒,但是这根巧克力棒太长了,LYK 无法一口吞进去.具体地,这根巧克力棒长为 n,它想将这根巧克力棒折成 n 段长为 1 的巧克力棒,然后慢慢享用.它打算每次将一根长为 k 的巧克力棒折成两段长为 a

2017.2.17学习C#的第一天,我眼中的C#是什么样的?

今天是学习C#的第一天,感谢凯哥带我走上了学习C#的正路(昨天资料发下来自己看了下,云里雾里,没咋看懂). 一 什么是C#(第一天学习) 首先感谢凯哥让我了解了C#的起源,发展.从最初的C到C++再到现在的C++++(也就是C#),它与JAVA的恩恩怨怨,微软和JAVA的恩恩怨怨(具体是啥我也没怎么记住,还是凯哥说的对,度娘上有详细的解释,我就不复制粘贴了).但是有一点我记得很清楚,C#中的#就是sharp的意思,sharp是锋利,敏捷的意思,因此在我眼中,C#就是锋利,敏捷的编程语言!让我更效

2017.8.17

这可能是Intellij的一个bug,在使用spring-boot的时候,如果把某个引入的依赖设置为provided,那么在Intellij启动时就会找不到相应的类.因此,此时需要把此项配置给注释掉,但是打包上线的时候并不需要这些依赖,那么在打包的时候就把注释打开,即可. 主要使用的是redux的reducer统一的store,整个应用只有一个store,用来保存所有的状态,视图不需要自己维护状态.视图通过connect函数绑定到store,当store状态变化后,store会通知视图刷新.触发

《三联生活周刊》2017年17期:3星。电子版阅读体验远超纸版。如果雄安的土地制度实验成功了,“北上广深”的房价也就被釜底抽薪了。

家附近的报刊亭都被拆了,被迫看电子版三联.发现阅读体验远超纸版.主要有以下两个方面的好处:1:看图片的体验,电子版好过纸版.当然前提是在电脑上或平板上看,kindle是黑白的,看图片效果比较查:2:可以做笔记,笔记可以永久保存:3:检索方便. 目前电子版的缺陷是滞后两期,导致时效性太差,只能当作纸版的长尾. 本期雄安的几篇文章比较有深度.总体评价3星. 以下是本期中一些重要的信息的摘抄: 1:研究人员调查分析了美国11个城市10年中举办马拉松赛事前后心脏病患者的死亡率后发现,那些在赛事举办时发生

51CTO博客发布H5移动版(适配手机)2017.5.17

各位,51CTO博客于5月17日发布H5移动版,可以适配手机和平板,分享文章到手机,阅读体验更佳,扫码可以进入(进入后,可以收藏到浏览器或展示在手机桌面,以后可以打开进入博客): 后续我们还会继续优化移动站的首页,也欢迎广大博友的建议和意见.

2017.12.17

2017.12.03 贪心,分治综合习题(1) 1. 2的幂次方表示 思路:本题很容易就想到用递归做.对于2的一次和二次,可以直接打表输出,而且题中所给的数据不大,N<20000,可以预处理把21到215储存在一个数组里,以后好比较.然后就贪心调用函数,把k每次从大到小比较,用s记数,输出括号,进行下一次递归.需要注意的是,在递归中,2的零次幂和2的一次幂是要单独特殊判断的. 核心代码: if(k==0){ printf("0"); return; } else if(k==1)

2017.7.17 列表去重,列表元组,集合

生成列表: aa = [i for i in range(1,18)] 列表    a = [11,22,3,11,22,3]增删改查 元组    b = (11,22,33,11,22,33)只读 集合    c = {11,22,33} 增删改查,但是元素不能重复 列表去重 d = set(a)  d 是集合 f = list(d)    f是列表

2017.07.17 Python网络爬虫之Python基础1

1.Python变量类型: (1)数字 int类型:有符号整数,就是C语言中所指的整型,也就是数学中的整数,它的大小与安装的解释器的位数有关 查看当前系统下的Int最大值: 与C语言不同,Python给变量赋值时不需要预先声明变量类型,也就是说在给变量赋值时小于2147483647的数字默认认为是int类型,超过了则自动为Long类型 另外,八进制数字,十六进制数字都属于int(Long)类型的 Long类型:长整型,超过int类型的整数默认转换为Long,一般来说int足够用了,只要内存足够大

2017.7.17 模块

__all__ = []方法,在调用是import 模块名*,只能用列表内的方法 发布模块: setup.py