士兵队列训练问题
来源:互联网 发布:淘宝指数 编辑:程序博客网 时间:2024/05/11 12:37
某部队进行新兵队列训练, 将新兵从一开始按顺序依次编号, 并排成一行横队, 训练的
规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠 拢,再从头开
始进行一至三报数, 凡报到三的出列, 剩下的向小序号方向靠拢, 继续从头开始进行一至二
报数。。。, 以后从头开始轮流进行一至二报数、一至三报 数直到剩下的人数不超过三人为止。
★数据输入
第一行为组数 N,接着为 N 行新兵人数,新兵人数不超过 5000。
★数据输出
共有 N 行, 分别对应输入的新兵人数, 每行输出剩下的新兵最初的编号, 编号之间有一
个空格。
输入示例 输出示例
2 1 7 19
20 1 19 37
40
#include<stdio.h>
void p1(int n,int arr[],int &sum);
void p2(int n,int arr[],int &sum)
{ int i;
if(n<=3)
{
sum=n;
for(i=0;i<n;i++)
arr[i]=i+1;
return;
}
p1(n-(n/2),arr,sum);
for(i=0;i<sum;i++)
arr[i]=(arr[i]+arr[i]-1);}
void p1(int n,int arr[],int &sum)
{ int i;
if(n<=3)
{
sum=n;
for(i=0;i<n;i++)
arr[i]=i+1;
return; }
p2(n-(n/3),arr,sum);
for(i=0;i<sum;i++)
arr[i]=(arr[i]+(arr[i]-1)/2);}
int main()
{ int num,row,arr[3],sum,i;
scanf("%d",&row);
while(row--)
{ scanf("%d",&num);
arr[0]=arr[1]=arr[2]=0;
p2(num,arr,sum);
for(i=0;i<sum-1;i++)
printf("%d ",arr[i]);
printf("%d\n",arr[sum-1]);
}
return 0;
}
- HDU1276:士兵队列训练问题
- hdu_1276 士兵队列训练问题
- HDU1274 士兵队列训练问题
- 1276 士兵队列训练问题
- HDU1276 士兵队列训练问题
- 士兵队列训练问题
- 1276 士兵队列训练问题
- 士兵队列训练问题
- 士兵队列训练问题
- ACM-士兵队列训练问题
- B - 士兵队列训练问题
- hdoj1276士兵队列训练问题
- 士兵队列训练问题
- 士兵队列训练问题
- HDU1276-士兵队列训练问题
- 士兵队列训练问题 HDU
- 士兵队列训练问题
- 士兵队列训练问题
- hdu1789Doing Homework again(贪心)
- 单例模式
- 求一个整数转换为二进制数后有几个1
- android布局属性
- 实时操作系统任务调度
- 士兵队列训练问题
- sizeof
- C#程序实现窗体的最大化/最小化
- 虚拟继承,重载,隐藏
- spoj 694 Distinct Substrings(不相同的子串的个数)
- 第十二周项目1(4)
- mybatis 自增主键配置
- GO语言学习——简单的key-valeu数据库的实现
- Java线程池使用说明