Input
本题有多个测试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000。
Output
共有N行,分别对应输入的新兵人数,每行输出剩下的新兵最初的编号,编号之间有一个空格。
Sample Input
2 20 40
Sample Output
1 7 19 1 19 37
1,直接上代码,解决问题。
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int t;
cin>>t;
for(int i=0;i<t;i++)
{
int ren;
cin>>ren;
int sum=0;
int a[5000]; //定义数组必须给出明确的大小
fill(a,a+5000,1); //未确定的变量不能给未知的变量赋值
for(;;)
{
if(ren-sum<=3) break; //首先就判断,给出的人数是否是小于3 的情况!!
int num1=2;
for(int j=0;j<ren;j++)
{
if(a[j]==1) num1++;
if(num1%2==0&&a[j]!=0)
{
a[j]=0;
sum++;
}
}
if(ren-sum<=3) break;
int num2=3;
for(int k=0;k<ren;k++)
{
if(a[k]==1) num2++;
if(num2%3==0&&a[k]!=0) //不要出现重复计数的问题
{
a[k]=0;
sum++;
}
}
}
for(int k=0;k<ren;k++)
{
if(a[k]==1&&k!=0) //格式问题,注意把题目看完,设置一个好的节点
cout<<" ";
if(a[k]==1)
cout<<k+1;
}
cout<<endl;
}
}
2,代码简单化的问题
- t 组数据问题
- 判断问题
3.输出的格式一定要看好问题的描述或者看示例输出