|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
https://www.dotcpp.com/oj/problem1004.html
这是题目网址
- #include<stdio.h>
- int fun(int n)
- {
- if(n<=4)
- return n;
- else
- return fun(n-1)+fun(n-3);
- }
- int main()
- {
- int n;
- while(n!=0)
- {scanf("%d",&n);
- printf("%d\n",fun(n));
- }
- return 0;
-
- }
复制代码- #include<stdio.h>
- int main()
- {
- int a,n,p[55]={1,2,3,4};
- while(n!=0)
- {scanf("%d",&n);
- for(a=4;a<=54;a++)
- p[a]=p[a-1]+p[a-3];
- a = n-1;
- printf("%d\n",p[a]);}
- return 0;
- }
复制代码
两种思路提交上去都有问题。
你好!这里为你提供两个修正后的代码。
请注意在使用scanf输入n之前,要先将n初始化为一个非零值,以便在循环中不会立即终止。
第一种方法:递归
- #include<stdio.h>
- int fun(int n)
- {
- if(n <= 4)
- return n;
- else
- return fun(n-1) + fun(n-3);
- }
- int main()
- {
- int n = 1;
- while(n != 0)
- {
- scanf("%d", &n);
- if(n == 0)
- break;
- printf("%d\n", fun(n));
- }
- return 0;
- }
复制代码
第二种方法:动态规划
- #include<stdio.h>
- int main()
- {
- int a, n = 1, p[55] = {1, 2, 3, 4};
- for(a = 4; a <= 54; a++)
- p[a] = p[a-1] + p[a-3];
-
- while(n != 0)
- {
- scanf("%d", &n);
- if(n == 0)
- break;
- a = n - 1;
- printf("%d\n", p[a]);
- }
- return 0;
- }
复制代码
|
|