永发信息网

pascal递归信封问题

答案:3  悬赏:0  手机版
解决时间 2021-05-08 22:49

pascal递归

信封问题。某人写了n封信和n个信封,如果所有的信都装错了信封。求所有信都装错信封共有多少种不同情况。

求高手火速回答。

最佳答案
n从1到9,分别有0,1,2,9,44,265,1854,14833,133496.
对于第n个数的规律是这样的:f(1)=0;f(n)=f(n-1)*(n+1)-1+(n mod 2)*2;你可以验算一下.
递归法程序如下:
program sgxf;
var n:longint;
function f(x:longint):longint;
begin
if x=1 then f:=0
else if x=2 then f:=1;
else f(x):=f(x-1)*(n+1)-1+(x mod 2)*2;
end;
begin
readln(n);
writeln(f(n));
end.
如果编译器允许,你可以用int64类型.
全部回答

这是程序

var n,ans:longint; a:array[1..10]of integer; yes:array[1..10]of boolean;

procedure dfs(deep:integer); var i,j:integer; begin if deep>n then ans:=ans+1 else for i:=1 to n do if (yes[i])and(i<>deep) then begin yes[i]:=false; a[deep]:=i; dfs(deep+1); yes[i]:=true; end; end;

begin fillchar(yes,sizeof(yes),true); readln(n); dfs(1); writeln(ans); readln end.

这是用深度搜索的方法写的程序,每次枚举每一位可以放的数字,并采用回溯法遍历所有可能的结果。

1-10分别是:0,1,2,9,44,265,1854,14833,133496,1334961

这题是递推题,楼上找出的规律是正确的.为了最大程度的优化,不应该用递归,而应该用循环. var n,s:longint; begin readln(n); s:=1; repeat s:=s*n; dec(n); until(n<=1); end.
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
李贞贤这样是不是过分了?
问道练敏水怎么加点好?
大家会多喜欢吃面呢?
急求和甩葱歌一个类型的。
曹县到巨野多少公里,从巨野到日照跟旅游团大
对与鬼王的技能与天书的取舍
哪里召童工
谁给说下 会长大的幸福 TANK 歌词 全一点
贵港舞悦天舞蹈培训中心在哪里啊,我有事要去
乳房只有一个肿痛是怀孕吗
葵花籽有转基因的吗,目前市面上的葵花籽油是
从商丘这到杭州要多长时间?
怎么把迷你卡片的空间动态模版弄掉啊???
上月,月经后十一天和老公做过。各这月都七天
有关芙蓉的古诗词,有关芙蓉的诗句
推荐资讯
暗含智慧的诗句,和喜欢的女人告别的名言
山西省哪个专科最好?
重庆市和湘西的哪个地方最近
勇秀士多店地址在哪,我要去那里办事
使用ipconfig的相关命令无效
关于oppo a107 qq
帮忙翻译成简体中文
失败是成功他娘,他爹是谁呢???
黄岛到天津 最近的高速路线 谁知道?
怎么会有这种情况
鑫星文体百货地址有知道的么?有点事想过去
魔方第三层详细解法
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?