这个题目挺有意思的,我主要用了“斐波那契数列”的知识来解答的,但是发现了问题。
1、我用了函数递归来解题,导致时间超时,问题是由于每次解答一题要递归好几次。
2、题目中的 0<n<55头牛的条件没用上,所以换个思路,先循环一次把到55头牛在斐波那契数列中的排列记录下来,之后解题时候调用数列就快了很多。
结果在网页编译通过,答题正确。
#include<stdio.h> #define N 55 int monther_cow[N]; void monther_cow2(int n); int main() { int input[N]; monther_cow2(N); int i = 0; do { scanf("%d",&input[i]); }while(input[i++] != 0); for(int j = 0 ; j < i-1 ; j++) { if( input[j] < 4) { printf("%d\n",monther_cow[input[j]]); } else { printf("%d\n",monther_cow[input[j] - 1] + monther_cow[input[j] - 3] ); } } return 0; } void monther_cow2(int n)//记录的斐波那契数列中对应的规律到数列 { int i; for(i = 1 ; i <= n ; i++) { if( i < 4) { monther_cow[i] = i; } else { monther_cow[i] = monther_cow[i - 1] + monther_cow[i - 3]; } } }
0.0分
179 人评分
可以解释一下如下语块是怎么运行的吗? int i = 0; do { scanf("%d",&input[i]); }while(input[i++] != 0); 为啥我这样不可以: int a[55]={1}; int i; for(i=0;a[i]!=0;i++){ scanf("%d",&a[i]); getchar(); } 请大佬赐教
#include <stdio.h> main(){ int n,i; int a[55]={0,1,2,3}; for(i=4;i<55;i++) a[i]=a[i-1]+a[i-3]; while(~scanf("%d",&n)) if(n==0) return ; else printf("%d\n",a[n]); } 成功
#include <stdio.h> int main() { int n,sum,s,i,j,a[55]; sum=1; s=0; scanf("%d",&n); if (n==0) { printf("\n"); } else if(n<=4) { sum=n; printf("%d",sum); } else if(n>=5) { sum=sum+4; a[0]=1; a[1]=1; a[2]=1; a[3]=1; a[4]=1; for (i=1;i<=n-4;i++) { s=a[0]; for(j=1;j<=i;j++) { s=s+a[j]; } a[i+4]=s; sum=sum+s; } printf("%d",sum); } } 这样子答案我自己测试都是对的,为什么会判错
zsai 2020-07-04 11:47:19 |
你这只能读取一次,没循环
成功 int main() { int t(int x),i; while(~scanf("%d", &i)){ if (i == 0)break; printf("%d\n", t(i)); } return 0; } int t(int x) { if (x <= 4) return x; return t(x-1)+t(x-3); }
#include<stdio.h> int mn(int n) { if((n-3) > 0) return mn(n-1)+(n-3); else return n; } int main() { int n = 0; int a[55] = {0}; int b; do{scanf("%d",&a[n]); }while(a[n++]!=0); for(int i=0;i<n-1;i++) { b=mn(a[i]); printf("%d\n",b); } return 0; }答案错误%50,是我那点没考虑到么,求解决
#include<stdio.h> int f(int n) { if (n >= 1 && n <= 4) return n; else return f(n - 1) + f(n - 3); } int main() { int s=0, i,n; scanf("%d", &n); for (i = 1; i <= n; i++) { s =s+f(i); } printf("%d", s); } 为什么答案错误
#include<stdio.h> int main() { int year; int cow=6; int i; while(scanf("%d",&year)){ if(year==0){ return 0; }else if(year<=4){ printf("%d\n",year); }else if(year==5){ printf("%d\n",6); } else{ for(i=5;i<year;i++){ cow+=i-2; } printf("%d\n",cow); } } return 0; } 这个为什么不对啊
#include<stdio.h> void add(int a[]){ for(int i = 0; i < 55; i++){ if(i<4) a[i] = i+1; else a[i] = a[i-1] + a[i-3]; } } int main(){ int a[55], b[55]; int i = 0; add(a); while(1){ scanf("%d",&b[i]); if(b[i] == 0) break; i++; } for(int j = 0; j < i; j++){ printf("%d\n",a[b[j] - 1]); } return 0; } 同样刚开始用的是递归,然后超时了,后面也是把斐波那契数列先存入一个数组里面。 比较少刷题,没注意看那个输出要求,一开始没换行,没有按照要求输出,致交了N次都是错的。
fdasf 2020-02-15 22:01:09 |
我每次输入一个数值 回车之后直接出结果了 怎么办 兄弟
输出九九乘法表 (C语言代码)浏览:555 |
C语言训练-求矩阵的两对角线上的元素之和 (C语言代码)浏览:598 |
c primer plus 第十二章 12.1小节浏览:375 |
WU-输出九九乘法表 (C++代码)浏览:1654 |
C语言程序设计教程(第三版)课后习题8.9 (C语言代码)浏览:817 |
IP判断 (C语言描述,蓝桥杯)浏览:1092 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:560 |
C语言程序设计教程(第三版)课后习题5.5 (C语言代码)浏览:553 |
小九九 (C语言描述,不看要求真坑爹)浏览:981 |
勾股数 (C语言代码)浏览:799 |
天青色 2020-03-31 17:16:34 |
input[i++]存储输入值,输入为0时跳出;你给的程序问题在于int a[55]={1};只有a[0]=1,后面数组a的值都为0,输入第一个值后,i++,i=1,a[1]=0就会跳出循环,不满足循环条件。个人小白尝试修改: for (i = 0; input[i] != 0; i++) { scanf("%d", &input[i]); if (input[i]==0) { break; } input[i + 1] = 1; getchar(); }
天青色 2020-03-31 17:17:01 |
若有不对,请轻喷
煮酒老麦 2020-03-31 17:48:52 |
@Fantasy125 懂了,谢谢啦