經過第一輪的遊戲,不少同學將會獲得聖誕特別禮物,但這時細心的數學課代表發現了乙個問題:留下來的人太多而使禮物數量可能不夠,為此,加試了一道數學題:將乙個正整數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 輸出樣例...