XYLX 10 13 最優分解方案

2021-07-06 07:29:31 字數 1832 閱讀 5725

經過第一輪的遊戲,不少同學將會獲得聖誕特別禮物,但這時細心的數學課代表發現了乙個問題:留下來的人太多而使禮物數量可能不夠,為此,加試了一道數學題:將乙個正整數n分解成若干個互不相等的正整數的和,使得這些數的乘積最大,當主持人報出乙個n後,請你立即將這個最大值報出來,現請你幫你的好友編乙個程式來解決這個問題。

輸入檔案best.in中只有1個數n(其中1<=n<=1000)。

輸出檔案best.out中也是乙個數,是乘積的最大值。

12 該題直接將數分解成從2開始連續的數字,如果不足以連續則將最後乙個數字從後向前一次分給每個數乙個1.知道分完;

注意要加高精。

program best;

type ar=array[0..10000] of longint;

var n,sum,total,now,i,j:longint;

ans:ar;

num:array[1..10000] of longint;

procedure

mutiply

(var ans:ar;x:longint);

var i:longint;

begin

for i:=1

to ans[0] do

begin

ans[i]:=ans[i]*x;

end;

for i:=1

to ans[0]+20

dobegin

ans[i+1]:=ans[i+1]+(ans[i] div

10);

ans[i]:=ans[i] mod

10; end;

ans[0]:=ans[0]+20;

while (ans[0]>0) and (ans[ans[0]]=0) do dec(ans[0]);

end;

begin

readln(n);

now:=2;

sum:=0;

while n<>0

dobegin

if n>now

then

begin

inc(sum);

num[sum]:=now;

n:=n-now;

now:=now+1;

endelse

begin

inc(sum);

num[sum]:=n;

n:=0;

end;

end;

while (sum>1) and (num[sum]<=num[sum-1]) do

begin

j:=sum-1;

while (j>0) and (num[sum]>0) do

begin

num[j]:=num[j]+1;

num[sum]:=num[sum]-1;

j:=j-1;

end;

if num[sum]=0

then dec(sum);

end;

ans[1]:=1;

ans[0]:=1;

for i:=1

to sum do

begin

mutiply(ans,num[i]);

end;

for i:=ans[0] downto1do

write(ans[i]);

end.

___

`-._\ / `~~"--.,_

------>| `~~"--.,_

_.-'/ '.____,,,,----"""~~```'

蘿蔔,嘿嘿

1013 數素數 (20 分

令 p i 表示第 i 個素數。現任給兩個正整數 m n 10 4 請輸出 p m 到 p n 的所有素數。輸入格式 輸入在一行中給出 m 和 n,其間以空格分隔。輸出格式 輸出從 p m 到 p n 的所有素數,每 10 個數字佔 1 行,其間以空格分隔,但行末不得有多餘空格。輸入樣例 5 27 ...

1013 數素數 (20 分

1013 數素數 20 分 令 p i表示第 i 個素數。現任給兩個正整數 m n 10 4 請輸出 p m到 p n的所有素數。輸入格式 輸入在一行中給出 m 和 n,其間以空格分隔。輸出格式 輸出從 pm到 p n的所有素數,每 10 個數字佔 1 行,其間以空格分隔,但行末不得有多餘空格。輸入...

1013 數素數 20 分

令 p i表示第 i 個素數。現任給兩個正整數 m n 104,請輸出 p m到 p n的所有素數。輸入格式 輸入在一行中給出 m 和 n,其間以空格分隔。輸出格式 輸出從 p m 到 p n 的所有素數,每 10 個數字佔 1 行,其間以空格分隔,但行末不得有多餘空格。輸入樣例 5 27 輸出樣例...