5、 #include int a[101]; int n,i,ans,len,tmp,beg,end; int main(){ scanf("%d",&n); for (i=1;i<=n;i++) scanf("%d",&a[i]); tmp=0; NOIP2009初赛 提高组 C语言 8 ans=0; len=0; beg= ① for (i=1;i<=n;i++){ if (tmp+a[i]>ans){ ans=tmp
6、+a[i]; len=i-beg; } else if ( ② &&i-beg>len) len=i-beg; if (tmp+a[i] ③ ){ beg= ④ tmp=0; } else ⑤ } printf("%d %d",ans,len); return 0; } 2. (寻找等差数列) 有一些长度相等的等差数列(数列中每个数都为0~59的整数)
7、,设长度均为L,将等差数列中的所有数打乱顺序放在一起。现在给你这些打乱后的数,问原先,L最大可能为多大?先读入一个数n(1<=n<=60),再读入n个数,代表打乱后的数。输出等差数列最大可能长度L。 #include int hash[60]; int n, x, ans, maxnum; int work(int now) { int first, second, delta, i; int ok; while ( ① && !hash[now
8、]) ++now; if (now > maxnum) return 1; first = now; for (second = first; second <= maxnum; second++) if (hash[second]) { delta = ② if (first + delta * ③ > maxnum) NOIP2009初赛 提高组 C语言 9 break