如何用C#把一个整数写成若干个连续整数之和的形式?

问题描述:有些整数可以写成若干个连续整数之和的形式,比如15=1+2+3+4+5,15=4+5+6,15=7+8等。要求编写一个控制台应用程序,满足以下功能。
(1)从键盘接收一个整数;
(2)若该整数可以写成若干个连续整数之和,就输出其所有的整数序列。
例如对于15,就输出
1 2 3 4 5
4 5 6
7 8
(3)若该整数不能写成若干个连续整数之和,输出提示信息“不存在满足条件的序列”。

static void Main(string[] args)
{
string tj = "";
int num = 0;
Console.Write("请输入1个整数!\r\n");
tj = Console.ReadLine().Trim();
if (Int32.TryParse(tj, out num))
{
num = Convert.ToInt32(tj);
}
else
Console.Write("请输入正确的整数!");
string text = "";
for (int i = 1; i < num; i++)
{
for (int j = num - 1; j >= 1&&j>i; j--)
{
if ((i + j) * 0.5 * Math.Abs(j - i+1) == num && i != j)
{
if (text != "")
{
text += "\r\n";
}

for (int k = i; k <= j; k++)
{
text += k.ToString() + " ";
}
text = text.Substring(0, text.Length - 1);
}
}
}
if (text == "")
{
Console.Write("不存在满足条件的序列!");
}
else
Console.Write(text);
Console.ReadLine();
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-09
好像并没有特别简洁的算法。对整数n,还是需要从1个数的和,到m个数的和,这m种情况一一查找。比如15,一个数不行,两个数就是78,一直到最多的5个数就是1 2 3 4 5
至于m是多少,用求和公式算一下上限,我目测m不可能到达n的一半。
程序应该不难写,关键是算法要理清。
相似回答