题目描述
给一个序列,按下面的方式进行三角形累加,求其和值。 比如序列为 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取模。
最初代码如下:
#include<stdio.h>
int main()
{
int N;
while(scanf("%d",&N)){
if(N==0)break;
int a[2*N-1];
int i,j;
for(i=0;i<2*N-1;i+=2){
scanf("%d",&a[i]);
}
for(i=0;i<N-1;i++){
j=i;
while(j<2*N-3-i){
a[j+1]=a[j]+a[j+2];
j+=2;
}
}
printf("%d\n",a[N-1]);
}
return 0;
}
遇到困难:
1、题目中结果要取2013的余数
2、a[j+1]越界
3、数字未知的判断
修改后代码如下:
#include<stdio.h>
int main()
{
int N;
while(scanf("%d",&N)){
if(N==0)break;
int a[2*N-1];
int i,j;
for(i=0;i<2*N-1;i+=2){
scanf("%d",&a[i]);
}
for(i=0;i<N-1;i++){
j=i;
while(j<2*N-3-i){
a[j+1]=a[j]+a[j+2];
if(a[j+1]>2013)
a[j+1]%=2013;
j+=2;
}
}
printf("%d\n",a[N-1]%2013);
}
return 0;
}