一、链接
1148 三角形
二、题目
题目描述
给一个序列,按下面的方式进行三角形累加,求其和值。 比如序列为 1,2,3,4,5
1 2 3 4 53 5 7 98 12 1620 2848
输入
有多组样例。每个样例的第一行是一个整数N(1≤N≤100),表示序列的大小, 如果N为0表示输入结束。这个样例不需要处理。 第二行是N个整数,每个整数处于[0,100]之间。
输出
每行输出一个样例的结果,由于结果可能很大,请将结果对2013取模。
样例输入
5 1 2 3 4 5 2 1 1 0
样例输出
48 2
三、题意
相当于把相邻的两个数相加,直到最后只剩下一个数字,最后输出这个数字
四、代码
c++代码
#include<iostream>using namespace std;const int N=100;int a[N];int main()
{int n;while(scanf("%d",&n),n!=0){for(int i=0;i<n;i++) scanf("%d",&a[i]);for(int i=0;i<n-1;i++){int temp=n-1;for(int j=0;j<temp;j++){int sum=0;sum=(a[j]+a[j+1])%2013;a[j]=sum;}temp--;//printf("%d\n",a[0]);}printf("%d\n",a[0]);}return 0;
}
c语言代码
#include<stdio.h>int a[100+10];int main()
{int n;while(scanf("%d",&n),n!=0){for(int i=0;i<n;i++) scanf("%d",&a[i]);for(int i=0;i<n-1;i++){int temp=n-1;for(int i=0;i<temp;i++){int sum=a[i]+a[i+1];a[i]=(sum)%2013;}temp--;}printf("%d\n",a[0]);}return 0;
}
五、总结
1.这个算是一个朴素模拟和观察分析的题目
2.模拟样例:1 2 3 4 5,会进行4次计算,每一个的计算结果都比上一行数字个数减少1,也就是说,5个数字,经过4次计算,最后只剩下一个数字,推而广之,n个数字,经过n-1轮计算,数字元素经过一轮计算,减少一个数字元素,最后只剩下一个计算结果,就是我们要求的答案
(由特殊样例抽象为一般化的结论)
3.利用数组的特性,每进行一次计算,我们把计算结果存储在前一个数组元素里面,比如说计算a[0]+a[1], 把结果存在a[0]里面,计算a[1]+a[2],把结果存在a[1]里面,就是这几行代码
(经过一次计算之后,该次计算的被加数在下一次计算中不会再被用到,所以我们可以把该词2计算的结果存储在被加数的位置)
int sum=a[i]+a[i+1];
a[i]=(sum)%2013;
根据题目要求,防止数字过大,需要对2013进行取模运算
4.n个数字,n-1轮计算,每一轮计算之后,数字总个数减小1,使用这几行代码实现
int temp=n-1;for(int i=0;i<temp;i++)
{int sum=a[i]+a[i+1];a[i]=(sum)%2013;
}temp--;
5.遇到这种个题目,耐心观察模拟即可
六、精美图片