Description
若一个三位数的十位数字比个位数字和百位数字都大,称这个数为“伞数”.
现从1,2,3,4,5,6…N,这N个数字中取3个数,组成无重复数字的三位数,
问其中有多少个伞数
Input
一行,给出数字N,N<=9
Output
如题
Sample Input
6
Sample Output
40
HINT
如果此题不用按从大到小排列,直接一个排列数公式即可,可是,他要按顺序来,不准排列!
回想一下,这不是组合数公式吗?!
于是,这就是一道水题,代码:
#include<bits/stdc++.h>
using namespace std;
int jc(int n)//阶乘
{
int sum=1;
for(int i=1;i<=n;i++)
sum*=i;
return sum;
}
int C(int n,int m)//组合数公式
{
return jc(n)/jc(n-m)/6*2;
}
int main() {
int n;
cin>>n;
cout<<C(n,3)<<endl;
return 0;
}
加强版(自己编的题):若一个多位数的十位数字比个位数字和百位数字都大,称这个数为“伞数”.
现从1,2,3,4,5,6…N,这N个数字中取M个数,组成无重复数字的M位数,
问其中有多少个伞数?
改一下就行!
代码:
#include<bits/stdc++.h>
using namespace std;
int jc(int n)//阶乘
{
int sum=1;
for(int i=1;i<=n;i++)
sum*=i;
return sum;
}
int C(int n,int m)//组合数公式
{
return jc(n)/jc(n-m)/m;
}
int main() {
int n,m;
cin>>n>>m;
cout<<C(n,m)<<endl;
return 0;
}