用模拟精灵解百度编程大赛试题

来源:互联网  作者:一鹤
摘要:原题要求用c++做的,不过用模拟精灵比较快,但未仔细分析优化。第一题 连续正整数(10分)题目描述:一个正整数有可能可以被表示为n(n=2)个连续正整数之和,如:15=1+2+3+4+515=4+5+615=7+8请编写程序,根据输入的任何……

原题要求用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

评分标准:程序输出结果是否正确。

print(str);

while( nStop() ) do
delay(100)

print("按".._STOPHKEY..",然后输入一个数字退出程序")
print("请输入一个正整数:")

ns = io.read();

while( nStop() and ( not tonumber(ns) ) )do
print("请输入一个有效整数");
ns = io.read();
end

n = tonumber(ns)

print("")

for i=1,n/2+1,1 do
local k = 0;
local j2 =0;
for j =i,n/2+1,1 do
k = k + j;
j2=j;
if(k == n) then break end;
end;

if(k==n)then
local out = n.." = "..i;
for y=i+1,j2,1 do
out = out.." + "..y
end;
print(out);
end;
end;

print("")

end;

【相关文章】好搜一下
修练8年:C++面向对象程序设计之体会

修练8年:C++面向对象程序设计之体会

六年前,我刚热恋“面向对象”(Object-Oriented)时,一口气记住了近…