链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
题目描述
牛牛有一个整数 n,他想知道这个数字所有好的划分中字典序最小的划分方案是什么。
一个好的划分是一个正整数序列,序列中所有数字的和等于 n,且序列中不存在相同的数。
输入描述:
本题采用多组案例输入,第一行一个整数 T代表案例组数。
每组案例中,输入一行一个整数代表 n。
保证: 0<n≤10^6 单个测试点中所有案例 n的和不超过 10^6
输出描述:
对于每组案例,输出一行若干个正整数代表划分出字典序最小的序列,整数之间用空格分隔。
示例1
输入
3 4 7 10
输出
1 3 1 2 4 1 2 3 4
代码:
#include<iostream>
using namespace std;
int main(){
int T;
cin>>T;
int n[T];
bool p=true;
for(int i=0;i<T;i++){
cin>>n[i];
}
for(int i=0;i<T;i++){
int j=0,sum=0;
while(sum!=n[i]){ //j代表每次新增的字典中的数
if(n[i]-sum-(j+1)<=j+1&&n[i]-sum-(j+1)!=0&&sum!=n[i]){ //有点动龟的味道,说不清
j++;
p=false;
}
else{
j++;
sum+=j;
cout<<j;
p=true;
}
if(sum!=n[i]&&p==true){
cout<<" ";
}
else if(sum==n[i]){
cout<<endl;
}
}
}
return 0;
}