1092题目:输入包含多组样例。每组样例包含一个整数N,然后在同行有N个整数。
若N = 0,则表示输入结束,这个样例不需要被处理。
旧思维写的复杂冗余算法:
#include<stdio.h> #define max 100000 int main(){ int s,sum[max],n=0,m=0,i; while(scanf("%d",&n)){ if(n==0) break; i=0; while( i<n){ scanf("%d",&s) ; sum[m]=sum[m]+s; i++; } m++; } for(int i=0;i<m;i++) printf("%d ",sum[i]); }
活用EOF简化:
#include<stdio.h> #define max 100000 int main(){ int s,sum[max],n,m=0,i; while(scanf("%d",&n)!=EOF&&n){ s=0; while(n--){ scanf("%d",&i) ; s+=i; } printf("%d ",s); } }
1093题目:第一行有一个整数N,表示有N行数。接下来N行,每行第一个为整数M,表示本行后面有M个整数。
旧思路:
#include<stdio.h> #define max 100000 int main(){ int s,n,sum[max],m=0,i,j=0,N; scanf("%d",&N); while(j<N){ scanf("%d",&n); i=0; while( i<n){ scanf("%d",&s) ; sum[m]=sum[m]+s; i++; } m++;j++; } for(i=0;i<m;i++) printf("%d ",sum[i]); }
简化:
#include<stdio.h> int main(){ int s,n,m=0,i=0,N; scanf("%d",&N); while(i<N){ scanf("%d",&n); s=0; while(n--){ scanf("%d",&m) ; s+=m; } i++; printf("%d ",s); } return 0; }