用模擬精靈解百度程式設計大賽試題

2021-04-02 08:04:53 字數 3192 閱讀 9132

原題要求用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;第二題 重疊區間大小(20分)print(str);

--沒這個文字,簡單的寫乙個

-- txt = string.load("input.txt")

txt = [[12 20

20 32

1 25

6 7

11 5

6 4

6 8

1 3

2 23

11 22

1 32

4 18

]] tab = string.split( txt ,"/n"); --把多行拆分到乙個陣列

for k,v in pairs(tab) do

local t = string.split( v.." " ," ") --把當前值拆分成前後兩個數字

tab[k] = ;

end;

n = 0;

for k,x in pairs(tab) do

sleep(1);

local start_n = 0;

local end_n = 0;

for k,y in pairs(tab) do

sleep(1);

if( ( x[1] > y[1] ) and ( x[1] < y[2] ) )then

start_n = x[1];

if(x[2] < y[2])then

end_n = x[2];

else

end_n = y[2];

end;

elseif( ( y[1] > x[1] ) and ( y[1] < x[2] ) )then

start_n = y[1];

if(x[2] < y[2])then

end_n = x[2];

else

end_n = y[2];

end;

end;

end;

local n2 = end_n - start_n;

if(n2 > n)then

n = n2;

end;

end;

print("最大重疊區間大小"..n);

delay( _cmd_loop )

]]>

《資料區塊 />

第三題 字串替換(30分)

第四題 低頻詞過濾(40分)print(str);

tab = string.split( str ," "); --把多行拆分到乙個陣列

tab2 = {};

for k,v in pairs(tab) do

if(tab2[v])then

tab2[v] = tab2[v] + 1; --這個關鍵字出現的次數加一

else

tab2[v] = 1;

end;

end;

--取得取出最低頻率單司的出現次數

min = 999999999999999;

for k,v in pairs(tab2) do

if(v < min)then min = v end;

end;

for k,v in pairs(tab2) do

if(v == min)then --刪除低頻單詞

str = string.gsub(str,k,"");

end;

end;

print("");

print("出現最少的次數"..min);

print("上面的文字分析以後的結果");

print(str);

delay( _cmd_loop )

2005「百度之星」程式設計大賽網上決賽試題

第一題 共兩題100分 站點統計 50分 題目描述 s 1 2 3 4 1 4 0 3 2 3 4 5 3 2 2 2 4 6 1 4 其中與s site 同行和同列的數字都表示站點號,其他每個數字表示乙個站點到另乙個站點的超文字鏈結數。如果站點a有到另乙個站點b的直接鏈結或間接 指通過乙個或多個直...

百度之星程式設計大賽題目

輸入格式 輸入的第一行只有乙個整數n,表示購置水果的組數。接下來的n行表示水果的到達時間 取走時間 時間用1200到1900之間的正整數表示,保證取走時間大於到達時間 剩下的字串以空格分割每一種水果。如 1400 1600 雪梨 水蜜桃 表示下午兩點到四點 包含兩點和四點這兩個時間點 雪梨和水蜜桃會...

我解2006百度之星程式設計大賽之蟈蟈計分

include include include include include include include math.h using namespace std struct score vector vector record queue vector testrecord vector ve...