南邮 OJ 1955 计算机基础知识大赛 2

计算机基础知识大赛 2

时间限制(普通/Java) :  1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 136            测试通过 : 62 

比赛描述

如果一个自然数n能写写成若干个连续自然数之和,则称其为自然数n的一个“分拆”。

如9=4+5,9=2+3+4,我们就说“4+5”与“2+3+4”是9的两个“分拆”。

编程求出任意数n的所有“分拆”。



输入

输入数据包含多组样例,每组样例包含一个自然数n。

输出

对于每组样例,列出所有可能分拆(按字典序,每行一种可能分拆,行内个数字以空格隔开),没有则输出 none。

样例输入

9
2

样例输出

2 3 4
4 5
none

提示

 

题目来源

计算机基础知识大赛 2013





#include<iostream>

int main(){
	int n,i,j,k,sum;
	bool findFlag;
	while(scanf("%d",&n)==1){
		i = j = 1;
		sum = 1;
		findFlag = 0;
		while(j<n){
			if(sum<n){
				sum += ++j;
			}else if(sum>n){
				sum -= i;
				i++;
			}else{
				findFlag = 1;
				printf("%d",i);
				for(k=i+1;k<=j;k++){
					printf(" %d",k);
				}
				printf("\n");
				sum += ++j;
			}
		}
		if(!findFlag){
			printf("none\n");
		}
	}
}



你可能感兴趣的:(ACM,2,南邮OJ,计算机基础知识大赛)