|
10鱼币
为什么就是算不出正确数值??
问题
从起点(0,0)走到终点(n,n)的最短路径数是C(2n,n),现在小兔又想如果不穿越对角线(但可接触对角线上的格点),这样的路径数有多少?
Input
每次输入一个数n(1<=n<=35),当n等于-1时结束输入。
Output
对于每个输入数据输出路径数,具体格式看Sample。
Sample Input
1
3
12
-1
Sample Output
1 1 2
2 3 10
3 12 416024
我的代码如下
- #include<stdio.h>
- int main()
- {
- int count=1,i,j,num,sum,sum1,sum2,t;
- while(scanf("%d",&num)!=EOF)
- {
- count++;
- int sum1=1,sum2=1;
- for(i=num*2;i>num;i--)
- {
- sum1*=i;
- }
- for(j=num;j>0;j--)
- {
- sum2*=j;
- }
-
- sum=sum1/sum2;
- printf("%d %d %d\n",count-1,num,sum);
- }
-
- return 0;
- }
复制代码
C++代码: - #include <iostream>
- using namespace std;
- int func(int n){
- if (n <= 1){return 1;}
- int res = 0;
- for (int i = 0; i < n; i++){
- res += func(i) * func(n - 1 - i);
- }
- return res;
- }
- int f(int x){
- return func(x) << 1;
- }
- int main (){
- int i = 0;
- while(true){
- i++;
- int n;
- cin >> n;
- if(n == -1){
- break;
- }
- cout << i << ' ' << n << ' ' << f (n) << endl;
- }
- return 0;
- }
复制代码C代码: - #include <stdio.h>
- int func(int n){
- if (n <= 1){return 1;}
- int res = 0;
- for (int i = 0; i < n; i++){
- res += func(i) * func(n - 1 - i);
- }
- return res;
- }
- int f(int x){
- return func(x) << 1;
- }
- int main(){
- int i = 0;
- while(1){
- i++;
- int n;
- scanf("%d", &n);
- if(n == -1){
- break;
- }
- printf("%d %d %d\n", i, n, f(n));
- }
- return 0;
- }
复制代码Python3代码: - def func(n: int) -> int:
- if n <= 1: return 1
- res = 0
- for i in range(n):
- res += func(i)*func(n-1-i)
- return res
- f = lambda x: func(x)<<1
- i = 0
- while True:
- i += 1
- n = int(input())
- if n == -1:
- break
- print(f"{i} {n} {f(n)}")
复制代码输出结果: - 1
- 1 1 2
- 3
- 2 3 10
- 12
- 3 12 416024
- -1
复制代码
|
最佳答案
查看完整内容
C++代码:C代码:Python3代码:输出结果:
|