算法—加法接力赛
算法描述
【问题描述】
正在上一年级的小卡卡最近开始学习数的加法运算,一天老师为了测试大家对加法的掌握情况,让同学们做了一个有趣的加法接力赛游戏。老师在黑板上从左到右写下了n个大于零的整数,老师接下来找出n个同学完成下面的计算任务。第一个同学在黑板上抄下最左边的数字,第二个同学负责将第一个同学写下的数字,加上老师写下的左边第二个数字所得到的数写在了黑板上。以此类推,第m个同学将前面第m-1个同学所写下的数字加上老师在黑板上写下的从左边数的第m个数字所得之和,并将结果写到黑板上。当计算完成这n个数字之后,老师又让同学从最右边开始按相同的方法再次计算出n个数值。最后老师让同学们找出这所有数字当中共有多少个是相同的。
例如:老师在黑板上写下了7个数,从左到右依次为:3,6,2,1,4,5,2,则同学们第一次从左边开始计算所得到的7个数值应该是:3,9,11,12,16,21,23;而第二次从右边开始计算所得到的7个数值应该是:2,7,11,12,14,20,23;于是第一次与第二次计算出的数值中相同的有3个,它们分别是:11、12与23。
【输入】
共两行,第一行为n(1<n<100),第二行为n个数,用空格隔开, 每个数的大小在0~200之间。
【输出】
第一次与第二次计算出的数值中相同的个数。
【输入样例】
7
3 6 2 1 4 5 2
【输出样例】
3
C语言的实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| #include<stdio.h> #define MAX 100 int a[MAX],sum[MAX],sum1[MAX],same[MAX]; int i,j,k,n,s,t; void try1(){ for(i=1;i<=n;i++) same[i]=0; for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ if(sum[i]==sum1[j]) same[i]=sum[i]; } } t=0; for(i=1;i<=n;i++){ if(same[i]!=0){ t++; printf("%d ",same[i]); } } printf("\n"); printf("共%d个数相同\n",t); }
int main(){ a[0]=0; printf("请输入数字总量n:"); scanf("%d",&n); printf("请从左到右录入数字(以空格分隔):"); for(i=1;i<=n;i++) scanf("%d",&a[i]);
printf("第一次运行:\n"); s=0; for(i=0;i<n;i++){ sum[i+1]=s+a[i+1]; s=sum[i+1]; } for(i=1;i<=n;i++) printf("%d ",sum[i]);
printf("\n第二次运行:\n"); s=0; for(i=n;i>0;i--){ sum1[n-i+1]=s+a[i]; s=sum1[n-i+1]; } for(i=1;i<=n;i++) printf("%d ",sum1[i]); printf("\n"); try1(); return 0; }
|
运行截图
