求大佬解答炒股这题,答案和参考是一样的但是过不了(注释是后面加的)

CG 发表于 4年前 · 关联问题 炒股

#include <stdio.h> int main(void) { int N; int a[1000],b[1000]={1}; int i=0,m=0,e,x; int max; scanf("%d",&N); //天数 for(int n=0;n<N;n++){ //循环输入股价 scanf("%d",&a[n]); } if(N>1){ for(e=0;e<(N-1);e++)//取出连续上升的天数 { x=e+1; if(a[e]<a[x]) b[m]++; else if(b[m]!=1&&a[e]>a[x]) m++; } if(m>0)//当连续上升天数大于1时 { max=b[0]>b[1]?b[0]:b[1]; for(int h=2;h<=m;h++)//比较最大连续上升天数 { max=b[h]>max?b[h]:max; } printf("%d",max);//输出最大连续上升天数 } else if(m==0)//当连续上升天数只有一天时 printf("%d",b[0]); } else if(N==0) printf("0"); //当天数位0/1时 else if(N==1) printf("1"); return 0; }

hchengf 发表于 18天前

include <stdio.h>

int main(void) {

int N; int a[1000],b[1000]={1}; int i=0,m=0,e,x; int max; scanf("%d",&N); //天数 for(int n=0;n<N;n++){ //循环输入股价 scanf("%d",&a[n]); } if(N>1){ for(e=0;e<(N-1);e++)//取出连续上升的天数 { x=e+1; if(a[e]<a[x]) b[m]++; else if(b[m]!=1&&a[e]>a[x]) m++; } if(m>0)//当连续上升天数大于1时 { max=b[0]>b[1]?b[0]:b[1]; for(int h=2;h<=m;h++)//比较最大连续上升天数 { max=b[h]>max?b[h]:max; } printf("%d",max);//输出最大连续上升天数 } else if(m==0)//当连续上升天数只有一天时 printf("%d",b[0]); } else if(N==0) printf("0"); //当天数位0/1时 else if(N==1) printf("1"); return 0;

}

BlueDream 发表于 8天前

用下标记录下降天数的做法用下标记录下降天数的做法

#include <stdio.h> #include <stdlib.h> int main() { //初始化数值,输入数值 int n, i, j = 0; //n是股价数量,i、j分别用于a、b数组的计数 scanf("%d", &n); //输入n int a[1000] = {0}; int b[1000] = {0}; //初始化数组a、b for(i = 0; i < n; i++){ scanf("%d", &a[i]); //输入数组a,保存所有股价 } //记录出现下降的天数,将股价下降天数的下标存入b数组 for(i = 1; i <= n + 1; i++){ if(a[i] < a[i - 1]){ b[j++] = i; } } //由于b数组储存的第一个数必定是第一个连续上升天数,保存为sum int sum = b[0]; //将b数组相邻的数字相减,得到连续上升天数,更新sum for(j = 1; b[j] != 0; j++){ if(b[j] - b[j - 1] > sum){ sum = b[j] - b[j - 1]; } } //输出 printf("%d", sum); }