| 描述 |
|---|
| 有一个程序员给自己定了个目标,第1天写1个代码,之后两天(第2、3天)里,每天写2个代码;之后3天(第4、5、6天)里,每天写3个代码……当连续N天每天写N个代码后,程序员会在之后的连续N+1天里,每天写N+1个代码。 给定一个天数,问从第一天开始的这些天里,程序员一共写了多少个代码。 |
| 输入 |
| 第1行是一个正整数n,表示测试案例的数量。 从第2行到第n+1行,每行有1个正整数,表示天数。 |
| 输出 |
| 针对每组测试案例,输出程序员写了多少个代码。 每组案例输出完都要换行。 |
| 样例输入 复制样例 |
| 1 3 |
| 样例输出 |
| 5 |
| HINT |
|
|
解:
#include<iostream>
using namespace std;
int main()
{long long int m,sum,JG=0;cin>>m;for(int i=1;i<=m;i++){bool c=0;int n;JG=0;cin>>n;for(int j=1;;j++){sum=((j*(j+1))/2);if(sum>n){c=1;sum=j;break;}if(sum==n){c=0;sum=j;break;}}if(c==0){JG=JG+((sum*(sum+1)*(2*sum+1))/6);}else{int t=0;sum--;for(int j=1;j<=sum;j++){t+=j;}JG=JG+((sum*(sum+1)*(2*sum+1))/6);JG=JG+((n-t)*(sum+1)); }cout<<JG<<endl;}return 0;
}
OR
#include<iostream>
using namespace std;
int main()
{long long int m,sum,JG=0;cin>>m;for(int i=1;i<=m;i++){bool c=0;int n;JG=0;cin>>n;sum=0;for(int j=1;;j++){sum+=j;if(sum>n){c=1;sum=j;break;}if(sum==n){c=0;sum=j;break;}}if(c==0){for(int j=1;j<=sum;j++){JG=JG+(j*j);}}else{int t=0;for(int j=1;j<=sum;j++){t+=j;JG=JG+(j*j);}JG=JG+((n-t)*sum); }cout<<JG<<endl;}return 0;
}
OR
#include<iostream>
using namespace std;
int main()
{long long int m,sum,JG=0;cin>>m;for(int i=1;i<=m;i++){bool c=0;int n;JG=0;cin>>n;sum=0;for(int j=1;;j++){sum+=j;if(sum>n){c=1;sum=j;break;}if(sum==n){c=0;sum=j;break;}}if(c==0){for(int j=1;j<=sum;j++){JG=JG+(j*j);}}else{int t=0;sum--;for(int j=1;j<=sum;j++){t+=j;JG=JG+(j*j);}JG=JG+((n-t)*(sum+1)); }cout<<JG<<endl;}return 0;
}
三个差别貌似不大,改来改去改出来的,如果发现问题请私聊我,拜托了。。。