一、鏈接
1148 三角形
二、題目
題目描述
給一個序列,按下面的方式進行三角形累加,求其和值。 比如序列為 1,2,3,4,5
1 2 3 4 5 3 5 7 9 8 12 16 20 28 48
輸入
有多組樣例。每個樣例的第一行是一個整數(shù)N(1≤N≤100),表示序列的大小, 如果N為0表示輸入結束。這個樣例不需要處理。 第二行是N個整數(shù),每個整數(shù)處于[0,100]之間。
輸出
每行輸出一個樣例的結果,由于結果可能很大,請將結果對2013取模。
樣例輸入
5 1 2 3 4 5 2 1 1 0
樣例輸出
48 2
三、題意
相當于把相鄰的兩個數(shù)相加,直到最后只剩下一個數(shù)字,最后輸出這個數(shù)字
四、代碼
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;
}
?文章來源地址http://www.zghlxwxcb.cn/news/detail-640737.html
五、總結
1.這個算是一個樸素模擬和觀察分析的題目
2.模擬樣例:1 2 3 4 5,會進行4次計算,每一個的計算結果都比上一行數(shù)字個數(shù)減少1,也就是說,5個數(shù)字,經(jīng)過4次計算,最后只剩下一個數(shù)字,推而廣之,n個數(shù)字,經(jīng)過n-1輪計算,數(shù)字元素經(jīng)過一輪計算,減少一個數(shù)字元素,最后只剩下一個計算結果,就是我們要求的答案
(由特殊樣例抽象為一般化的結論)
3.利用數(shù)組的特性,每進行一次計算,我們把計算結果存儲在前一個數(shù)組元素里面,比如說計算a[0]+a[1], 把結果存在a[0]里面,計算a[1]+a[2],把結果存在a[1]里面,就是這幾行代碼
(經(jīng)過一次計算之后,該次計算的被加數(shù)在下一次計算中不會再被用到,所以我們可以把該詞2計算的結果存儲在被加數(shù)的位置)
int sum=a[i]+a[i+1];
a[i]=(sum)%2013;
根據(jù)題目要求,防止數(shù)字過大,需要對2013進行取模運算
4.n個數(shù)字,n-1輪計算,每一輪計算之后,數(shù)字總個數(shù)減小1,使用這幾行代碼實現(xiàn)
?
int temp=n-1;
for(int i=0;i<temp;i++)
{
int sum=a[i]+a[i+1];
a[i]=(sum)%2013;
}
temp--;
5.遇到這種個題目,耐心觀察模擬即可?
六、精美圖片
文章來源:http://www.zghlxwxcb.cn/news/detail-640737.html
?
到了這里,關于湘大 XTU OJ 1148 三角形 題解(非常詳細):根據(jù)題意樸素模擬+觀察樣例分析需要計算幾輪 具體到一般的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!