算法基础题,用pascal代码

来源:百度知道 编辑:UC知道 时间:2024/05/05 18:07:09
一个整型变量只能用来存贮较小的 N!的值,当 N 较大时,可将阶乘值中的每一个数字放在一个一维数组的一个元素中。使用这方法,打印:
① N!的值;
② N!-M!(M>N);
③ N!+M!
-------------------------------
可以的话,再答下面两题:
48. 将4个红球,3个白球与3个黄球排成一排,共有多少种排法?

49. 有面值为 M..N 的邮票各一枚,共能拼出多少不同的面额。
不答也给分,答了一条追加10分。
应该是指在M>N的情况下,N!-M!,难道不可以负数吗?
我只是照着题目复制的……
--------------------------
不懂,详细一点,可以吗?

1.明显是高精度乘法、加法和减法啊~题目中描述得很清楚。建议你去看一下高精度的教程,就知道了
48.那么小就搜索吧
49.鉴于你没有说m和n多少,我来说一下动规做法
bool a[i]表示i这个数值能不能到达
一开始只有a[m]是true 然后用max记录一下现在可到最大数值
就这样
{初始化}
a[m]:=true;max:=m;ans:=1;
{dp}
for i:=m+1 to n do begin
for j:=max downto m do
if (a[j]=true)and(a[j+i]=false) then begin
inc(ans);a[j+i]=true;
if j+i>max then max:=i+j;
end;
end;
writeln(ans);

可以是负数。负数的话你先做m!再减n!,多输出一个符号罢了

48是dfs,不知道查一查深度优先搜索

LS正解