有一个程序员给自己定了个目标,第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; }三个差别貌似不大,改来改去改出来的,如果发现问题请私聊我,拜托了。。。
