马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
}
|