编写函数求组合数,从主函数输入整数n,调用函数求1~n可以组合成多少个不同的三位数,打印出这些三位数,输出格式为:"%d%d%d,",主函数中输出个数,输出格式为:"\n可组成%d个不同的3位数"。 请只提供子函数的编写。 【样例输入】 5 【样例输出】 123,124,125,132,134,135,142,143,145,152,153,154,213,214,215,231,234,235,241,243,245,251,253,254,312,314,315,321,324,325,341,342,345,351,352,354,412,413,415,421,423,425,431,432,435,451,452,453,512,513,514,521,523,524,531,532,534,541,542,543, 可组成60个不同的3位数
时间: 2023-08-25 14:06:16 浏览: 82
以下是求组合数的函数代码:
```c++
int C(int n, int m){
if(m > n) return 0;
if(m == 0 || m == n) return 1;
int ans = 1;
for(int i = 1; i <= m; i++){
ans = ans * (n - i + 1) / i;
}
return ans;
}
```
这个函数的作用是求解组合数 C(n, m)。其中 n 和 m 都是非负整数。如果 m > n,则返回 0;如果 m 等于 0 或 n,则返回 1。否则,按照公式 C(n, m) = n! / (m! * (n-m)!) 计算组合数。
在主函数中,可以调用这个函数来求解 1~n 可以组合成多少个不同的三位数,并输出这些三位数。比如:
```c++
int main(){
int n, cnt = 0;
scanf("%d", &n);
for(int i = 1; i <= 9; i++){
for(int j = i+1; j <= 9; j++){
for(int k = j+1; k <= 9; k++){
int num = i * 100 + j * 10 + k;
if(num <= n){
printf("%d%d%d,", i, j, k);
cnt++;
}
}
}
}
printf("\n可组成%d个不同的3位数", cnt);
return 0;
}
```
这个程序会从标准输入中读入整数 n,然后枚举所有的三位数,计算它们是否小于等于 n,如果是,则输出这个三位数,并将计数器 cnt 加一。最后,输出可组成的不同的三位数的个数。
阅读全文