6-4 求组合数(高效递归版)分数 10 全屏浏览题目 作者 李祥 单位 湖北经济学院 请编写递归函数,求组合数。 函数原型 double Cmb(int x, int y); 说明:x 和 y 为非负整数,且 x≥y,函数值为组合数 Cxy。 裁判程序 #include <stdio.h> double Cmb(int x, int y); int main() { int m, n; scanf("%d%d", &m, &n); printf("%.10g\n", Cmb(m, n)); return 0; }
时间: 2024-03-21 18:41:50 浏览: 36
下面是递归实现的代码:
```c++
double Cmb(int x, int y) {
if (y == 0 || y == x) {
return 1.0;
} else {
return Cmb(x - 1, y - 1) + Cmb(x - 1, y);
}
}
```
这里采用了递归的思想,将组合数的求解转化为了子问题的求解。当 y = 0 或 y = x 时,C(x, y) 的值为 1;否则,C(x, y) 的值等于 C(x-1, y-1) + C(x-1, y)。
需要注意的是,为了避免浮点数精度的问题,这里返回的是 double 类型的值。
相关问题
6-1 判断日期 分数 20 作者 李祥 单位 湖北经济学院 请编写函数,判断日期是否有效。 函数原型 int IsValidDate(int year, int month, int day);
好的,根据您的要求,我为您编写了如下的函数,用于判断给定的日期是否合法:
```
int IsValidDate(int year, int month, int day) {
if (year < 1 || month < 1 || month > 12 || day < 1) {
return 0;
}
int max_day = 31;
if (month == 4 || month == 6 || month == 9 || month == 11) {
max_day = 30;
} else if (month == 2) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
max_day = 29;
} else {
max_day = 28;
}
}
return day <= max_day;
}
```
这个函数接受三个参数:年份、月份和日期,返回一个整数值,如果日期是合法的,则返回1,否则返回0。
该函数的实现思路如下:
首先,如果年份、月份或日期中有任何一个小于1,则该日期无效,直接返回0。
其次,根据每个月的天数以及闰年的情况,计算该月最大的天数。对于4、6、9、11月,最大天数为30;对于2月,如果是闰年,则最大天数为29,否则为28;其余月份最大天数为31。
最后,比较给定的日期是否小于等于该月最大天数,如果是,则该日期有效,返回1,否则返回0。
希望这个函数能够满足您的需求!
6-1 成绩等级(switch版) 分数 10 作者 李祥 单位 湖北经济学院 请编写函数,根据学生的分数确定其等级。 分数 等级 [90, 100] A [80, 90) B [70, 80) C [60, 70) D [0, 60) E 函数原型
以下是根据分数判断等级的函数实现:
```python
def get_grade(score):
if score >= 90 and score <= 100:
return 'A'
elif score >= 80 and score < 90:
return 'B'
elif score >= 70 and score < 80:
return 'C'
elif score >= 60 and score < 70:
return 'D'
else:
return 'E'
```
使用方式如下:
```python
score = 85
grade = get_grade(score)
print(f"分数为{score}, 等级为{grade}")
```
输出结果为:
```
分数为85, 等级为B
```