湘大 XTU OJ 1148 三角形 题解(非常详细):根据题意朴素模拟+观察样例分析需要计算几轮 具体到一般

一、链接

1148 三角形

二、题目

题目描述

给一个序列,按下面的方式进行三角形累加,求其和值。 比如序列为 1,2,3,4,5

1   2   3   4   5
  3   5   7   9
    8  12   16
      20  28
        48

输入

有多组样例。每个样例的第一行是一个整数N(1≤N≤100),表示序列的大小, 如果N为0表示输入结束。这个样例不需要处理。 第二行是N个整数,每个整数处于[0,100]之间。

输出

每行输出一个样例的结果,由于结果可能很大,请将结果对2013取模

样例输入

5
1 2 3 4 5
2
1 1
0

样例输出

48
2

三、题意

相当于把相邻的两个数相加,直到最后只剩下一个数字,最后输出这个数字

四、代码

c++代码

#include

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

c语言代码

#include

int a[100+10];

int main()
{
	int n;
	while(scanf("%d",&n),n!=0)
	{
		for(int i=0;i

 

五、总结

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

5.遇到这种个题目,耐心观察模拟即可 

六、精美图片

湘大 XTU OJ 1148 三角形 题解(非常详细):根据题意朴素模拟+观察样例分析需要计算几轮 具体到一般_第1张图片

 

你可能感兴趣的:(算法竞赛,湘大,XTU,OJ,算法,c++,数据结构)