使用C#尝试编写百度之星程序设计大赛的题目(一)
第一题:连续正整数(10分)
题目描述: 一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如: 15=1+2+3+4+5 15=4+5+6 15=7+8 请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。
输入数据:一个正整数,以命令行参数的形式提供给程序。
输出数据:在标准输出上打印出符合题目描述的全部正整数序列,每行一个序列,每个序列都从该序列的最小正整数开始、以从小到大的顺序打印。如果结果有多个序列,按各序列的最小正整数的大小从小到大打印各序列。
此外,序列不允许重复,序列内的整数用一个空格分隔。如果没有符合要求的序列,输出「NONE」。 例如,对于15,其输出结果是: 1 2 3 4 5 4 5 6 7 8 对于16,其输出结果是: NONE 评分标准: 程序输出结果是否正确。
原题:http://hi.baidu.com/astar/blog/item/69570fb35eedeba6d9335ab5.html (链接已失效)
我见到的C++优化最好的代码的平均运行时间(若输入10000000)为0.15秒。
我设计的优化C#代码:
using System;
using System.Text;
namespace test
{
public class test
{
static void Main()
{
bool has = false;
Console.Write("Input Int:");
int a;
if (int.TryParse(Console.ReadLine(), out a) && a > 0)
{
int t = Environment.TickCount;
int max = a / 2 + 1;
int s = 0;
StringBuilder str = new StringBuilder ();
for (int i = 1; i < = max; i++)
{
s = i;
for (int ii = i + 1; ii <= max; ii++)
{
s += ii;
if (s == a)
{
has = true;
for (int iii = i; iii <= ii; iii++)
{
str.Append(iii);
str.Append(" ");
}
str.Append(";rn");
break;
}
if (s > a)
{
break;
}
}
}
if (!has)
{
Console.WriteLine("None");
}
t = Environment.TickCount - t;
Console.WriteLine(str);
Console.WriteLine("Time:{0:###.########}", (double)t/1000);
GC.Collect();
Main();
}
else
{
return;
}
}
}
}
输入10000000用时0.25秒。说明C#在数值计算上和C++还是有差距的。
题外话:我帮你整理了包括 AI 写作、绘画、视频(自媒体制作)零门槛 AI 课程 + 国内可直接顺畅使用的软件。想让自己快速用上 AI 工具来降本增效,辅助工作和生活?限时报名。
© 转载需附带本文链接,依据 CC BY-NC-SA 4.0 发布。