链接:
https://codeforces.com/problemset/problem/1455/B
题意:
每次从零开始,第K次操作可选:
A、sum+k;
B、sum-1;
算sum为所给数的最小操作数
解:
先加,加n次:
如果刚好为所需,答案即为n(废话)
如果加第n次时才大于时所需,那么多出来的部分一定小于n,设差值q;
可知,第k不如果不选加法,影响为k选加法操作的k-1(少加一个k多减一个1);
所以差值可以用前面加法里的q-1替换成-1,即少一个q-1,多一个-1来使总和减少q达成所需;
需要注意,如果q=1时,任何数替换成-1都不行(把1换成-1,总和-2),所以第k+1次操作选择-1即可;
实际代码:
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
for(int f=1;f<=n;f++)
{
int mb=0;
cin>>mb;
int sum=0;
int ans=0;
for(int i=1;;i++)
{
sum+=i;
if(sum>=mb)
{
ans=i;
break;
}
}
if(sum==mb) cout<<ans<<endl;
else if(sum==mb+1) cout<<ans+1<<endl;
else cout<<ans<<endl;
}
}
限制:
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output