用模擬精靈解百度編程大賽試題

字號:

原題要求用c 做的,不過用模擬精靈比較快,但未仔細(xì)分析優(yōu)化。
     第一題 連續(xù)正整數(shù)(10分)
     題目描述:一個正整數(shù)有可能可以被表示為n(n> =2)個連續(xù)正整數(shù)之和,如:
     15=1 2 3 4 5
     15=4 5 6
     15=7 8
     請編寫程序,根據(jù)輸入的任何一個正整數(shù),找出符合這種要求的所有連續(xù)正整數(shù)序列。
     輸入數(shù)據(jù):一個正整數(shù),以命令行參數(shù)的形式提供給程序。
     輸出數(shù)據(jù):在標(biāo)準(zhǔn)輸出上打印出符合題目描述的全部正整數(shù)序列,每行一個序列,每個序列都從該序列的最小正整數(shù)開始、以從小到大的順序打印。如果結(jié)果有多個序列,按各序列的最小正整數(shù)的大小從小到大打印各序列。此外,序列不允許重復(fù),序列內(nèi)的整數(shù)用一個空格分隔。如果沒有符合要求的序列,輸出“NONE”。
     例如,對于15,其輸出結(jié)果是:
     1 2 3 4 5
     4 5 6
     7 8
     對于16,其輸出結(jié)果是:
     NONE
     評分標(biāo)準(zhǔn):程序輸出結(jié)果是否正確。
    print(str);
    while( nStop() ) do
    delay(100)
    print("按".._SHKEY..",然后輸入一個數(shù)字退出程序")
    print("請輸入一個正整數(shù):")
    ns = io.read();
    while( nStop() and ( not tonumber(ns) ) )do
    print("請輸入一個有效整數(shù)");
    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;