anaoai @ 2021-08-30 17:51:14
在6以下数据都没有问题,6以上都比实际数据要小,找不到问题在哪,希望有大佬能解答,十分感谢!
#include <bits/stdc++.h>
using namespace std;
int main(){
int k;
int count=1;
int total=0;
int a=0;
cin>>k;
while(1){
for(int i=count;i>=0;i--){
total=total+count;
//cout<<total<<endl;//debug
//cout<<count<<endl;
a++;
if(a>k){
break;
}
}
if(a>k){
break;
}else{
count++;
}
}
cout<<total;
return 0;
}
by backers @ 2021-08-30 18:11:44
i>0 而不是i>=0 这会让for多执行一次,导致数据缩水
by qiu_tianyu @ 2021-08-30 18:19:10
@anaoai 我帮你改了,然后那个a>k 改成 a>=k或a==k。 不然会多算一天
#include <bits/stdc++.h>
using namespace std;
int main(){
int k;
int count=1;
int total=0;
int a=0;
cin>>k;
while(1){
for(int i=count;i>0;i--)
{
total=total+count;
a++;
if(a>=k){
break;
}
}
if(a>=k){
break;
}else{
count++;
}
}
cout<<total;
return 0;
}
by 少年自有狂 @ 2021-08-30 18:21:16
@繁星__终为空 对,而且题目中问的是第k天的金币数,两个if语句里的条件应该是a>=k而不是a>k,否则会算到第k+1天
#include <bits/stdc++.h>
using namespace std;
int main()
{
int k;
int count = 1;
int total = 0;
int a = 0;
cin >> k;
while (1)
{
for (int i = count; i > 0; i--)
{
total = total + count;
//cout<<total<<endl;//debug
//cout<<count<<endl;
a++;
if (a >= k)
{
break;
}
}
if (a >= k)
{
break;
}
else
{
count++;
}
}
cout << total;
return 0;
}
把这几个地方改掉,就行了\ 评测记录:https://www.luogu.com.cn/record/57250280
by 少年自有狂 @ 2021-08-30 18:23:32
我推的公式解,你看看
#include<bits/stdc++.h>
using namespace std;
long long n, k,ans;
int main(){
cin >> k;
for (int i = 1; i <= k;i++)
ans+=ceil(sqrt(2 * i + 0.25) - 0.5);
cout << ans;
return 0;
}
by anaoai @ 2021-08-30 18:48:36
@曹越 感谢,我该看看数据规律的,公式下来好简单2333
by anaoai @ 2021-08-30 18:50:33
@qiu_tianyu @繁星__终为空 感谢大佬,一开始我惯性思维,以为k就该循环k次2333
by backers @ 2021-08-30 19:23:16
其实我自己是有漏给1个点的,去吃了口饭,刚回来第一次被人当大佬,挺不习惯的
by backers @ 2021-08-30 19:25:01
公式这样更简单
for (int i = 1; i <= k;i++)
ans+=i*i;
by 一洛本谷通 @ 2021-10-06 14:38:50
@anaoai
#include <bits/stdc++.h>
using namespace std;
int main(){
int k;
int count=1;
int total=0;
int a=0;
bool b=0;
cin>>k;
while(1){
for(int i=count;i>0;i--){
a++;
total=total+count;
//cout<<total<<endl;//debug
//cout<<count<<endl;
}
if(a>=k){
total+=(k-a)*count;
break;
}else count++;
}
cout<<total;
return 0;
}
修改后代码