这道题一开始只用到两个循环,但其实没搞清楚题目的意思,我只是求出来了怎么搭配1和2去完成题目给的条件,但并没有考虑1和2是在哪一步走的。调试发现这个问题后,我便用排列组合去测试用例2中的10级台阶的89,因此修改了我的代码,传进了两个参数,进行排列组合,最后将他们相加,就是答案,但是过程中也遇到一些问题,比如求C73时,一开始先得到7/3这样子的除法会丢失精度,所以只能先求出7*6*5再去除以3*2*1,所以可以看到我的排列组合函数写了好几个循环,写完看了下大家答案,都用递归,发现确实思路上来讲更胜一筹。
考虑状态值,我还是得加强练习!
再补充一下,虽然我用例全过了,但我用了long int才过的,不知道为什么用递归大家用int也能过;
#include <stdio.h>
long int sortgroup(int a,int b){
long int sum = 1;
int c = a+b;
if(a == 0 || b == 0){
sum = 1;
}
else if(a<b){
int temp = a;
while(temp != 0){
sum *= c;
c--;
temp--;
}
temp = a;
while(temp != 0){
sum /= temp;
temp--;
}
}
else{
int temp = b;
while(temp != 0){
sum *= c;
c--;
temp--;
}
temp = b;
while(temp != 0){
sum /= temp;
temp--;
}
}
return sum;
}
int main(){
int n;
scanf("%d",&n);
long int count = 0;
for(int i = 0;i<=n;i++){
for(int j = 0;j<= n/2;j++){
if(i + j*2 == n){
count += sortgroup(i,j);
}
}
}
printf("%ld",count);
return 0;
}



京公网安备 11010502036488号