组合我是弄出来了 还有什么嘛?
#include"stdio.h"
int main()
{
int n,a,b,x,t,i;
__int64 sum;
while(scanf("%d",&n)!=EOF&&n>0)
{
sum=1;
x=1;
scanf("%d %d",&a,&b);
if(a {
i=a;
a=b;
b=i;
}
t=b;
if(a<=1||b<=1||a>20||b>20)
{continue;}
for(;b!=0;b--)
{
sum=sum*a;
a--;
}
for(b=t;b!=0;b--)
{
x=x*b;
}
printf("%I64d\n",sum/x);
}
}
求杭电2049思路...
答案:2 悬赏:40 手机版
解决时间 2021-04-04 06:23
- 提问者网友:动次大次蹦擦擦
- 2021-04-04 02:15
最佳答案
- 五星知识达人网友:西风乍起
- 2021-04-04 02:55
这道题的解法就是组合数和错排公式
组合数不用讲了,就是N个新郎中选出M个新郎;
错排公式递推是:f(n)=(n-1)*(f(n-1)+f(n-2)),n>=3 f(1)=0,f(2)=1;
两个相乘就可以得出答案了
代码的实现是很简单的,希望可以自己打,这样对自己才有好处。
组合数不用讲了,就是N个新郎中选出M个新郎;
错排公式递推是:f(n)=(n-1)*(f(n-1)+f(n-2)),n>=3 f(1)=0,f(2)=1;
两个相乘就可以得出答案了
代码的实现是很简单的,希望可以自己打,这样对自己才有好处。
全部回答
- 1楼网友:拜訪者
- 2021-04-04 03:45
看到这个不知道怎么做,排列组合早忘完了,纠结了半天排错公式,然后……
其实我看了那哥们儿的答案就觉得你的答案很可能是精度不够,但是觉得不只是这么简单的问题,所以纠结呀纠结……
终于看懂那个排错公式了,发现你的算法是对的……
然后改了一下
加上这个
#include
===============
int sum1,sum2,i; 改成
int i;
__int64 sum1,sum2;
================
int mm(int a)
改成
__int64 mm(int a)
===============
当然啦还有这句
cout<
#include
__int64 mm(int a)
{
if(a==1){return 0;}
else if(a==2){return 1;}
else return (a-1)*(mm(a-1)+mm(a-2));
}//求错排数
int main()
{
int c,n,m;
cin>>c;
while(c)
{
cin>>n>>m;
int i;
__int64 sum1,sum2;
i=m;sum1=1;sum2=1;
for(i;i>0;i--)
{
sum1=sum1*n;
n--;
sum2=sum2*i;
}//求n的m组合数(m
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯