Description
次安杰在你们的帮助下,成功通过了基础测试。可是这仍然改变不了他像猴子的事实,于是最讨厌猴子的宝昆决定给他一点颜色瞧瞧。宝昆搬来若个干盒子并叠成了三角形,每个盒子里按照顺序装了若干个香蕉。现在他告诉安杰三角形盒子的层数,希望安杰能返回正确结果给他。你们能帮助一下安杰吗?
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
Input
首先第一行有一个T,表示有T组样例;接下来T行每行有一个M(1<=M<10000),表示有一个M层的三角形。
Output
输出三角形各边的数字之和。
mple Input
4
1
2
3
4
Sample Output
1
10
42
112
思路
这道题一开始也没仔细想,一开始就是直接暴力用for循环,用第一个代码是肯定超时的,使用了双for。后面就把第二个for删掉,进行判断是不是最后一行是的话用一个for就可以了,不是的话直接跳过累加第一个数和最后一个数。
错误代码
#include<bits/stdc++.h>
using namespace std;
int main(){
long long sum,n,t,js;
scanf("%ld",&t);
while(t--){
js=0,sum=0;
scanf("%ld",&n);
for(int i=1;i<=n;i++){
for(int j=1;j<i*2;j++){
js++;
if(i==n){
sum+=js;
}else if(j==1||j==i*2-1){
sum+=js;
}
}
}
printf("%ld\n",sum);
}
return 0;
}
**正确代码**
```cpp
#in
clude<bits/stdc++.h>//g
using namespace std;
int main(){
long long sum,n,t,js;
scanf("%ld",&t);
while(t–){
js=0,sum=0;
scanf("%ld",&n);
for(int i=1;i<=n;i++){
js++;sum+=js;
if(i==n){
for(int j=2;j<i*2;j++){
js++;sum+=js;
}
}
else if(i>1){
js=js+(i-1)*2;
sum=sum+js;
}
}
printf("%ld\n",sum);
}
return 0;
}