【IT面试题002】将一个正整数拆成几个连续整数之和
/*
将一个正整数拆成几个连续整数之和代码
sum = a + (a+1) + (a + n - 1)
=> 2 * sum = n * (2a + n - 1)
*/
/*
将一个正整数写成若干个整数之和,打印出所有的可能,每种和输出时,加数升序排列
*/
#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int sum = 55;
int sum2 = sum * 2;
int n;
int a;
int upper = (int)sqrt(double(sum2));
for (n = 1;n <= upper;n++ )
{
if (sum2 % n == 0)
{
int temp = sum2 / n - n + 1;
if (temp%2 == 0)
{
a = temp / 2;
//得到了一个解
for(int i = 0;i<n;i++)
{
cout << a + i << " ";
}
cout << endl;
}
}
}
}
posted on 2011-06-04 18:07 speedmancs 阅读(678) 评论(0) 收藏 举报
浙公网安备 33010602011771号