A题 Steps
Time Limit: 3000MS Memory limit: 65536K
题目描述
One steps through integer points of the straight line. The length of a step must be nonnegative and can be by one bigger than, equal to, or by one smaller than the length of the previous step.
What is the minimum number of steps in order to get from x to y? The length of the first and the last step must be 1.
输入
Input consists of a line containing n, the number of test cases. For each test case, a line follows with two integers: 0<= x <= y < 231
输出
For each test case, print a line giving the minimum number of steps to get from xto y.
示例输入
3 45 48 45 49 45 50
示例输出
3 3 4
题意:从起点坐标x到终点坐标y一共需要多少步 起点和终点的前一步必须为1 且前一步和必须必后一步大一或者小一或者等于一
代码:
#include<iostream>
using namespace std;
int main()
{
int s,e;
int n;
cin>>n;
while(n--)
{
cin>>s>>e;
int len=e-s;
if(len==0)
cout<<0<<endl;
else if(len==1)
cout<<1<<endl;
else if(len==2)
cout<<2<<endl;
else
{
len-=2;
int bushu=3;
for(int i=2;;i++)
{
len-=i;
if(len<=0)
break;
bushu++;
len-=i;
if(len<=0)
break;
bushu++;
}
cout<<bushu<<endl;
}
}
return 0;
}
b题
The ? 1 ? 2 ? ... ? n = k problem
Time Limit: 3000MS Memory limit: 65536K
题目描述
Given the following formula, one can set operators '+' or '-' instead of each '?', in order to obtain a given k? 1 ? 2 ? ... ? n = k
For example: to obtain k = 12 , the expression to be used will be:- 1 + 2 + 3 + 4 + 5 + 6 - 7 = 12
with n = 7
输入
The first line is the number of test cases, followed by a blank line.
Each test case of the input contains integer k (0<=|k|<=1000000000).
Each test case will be separated by a single line.
输出
For each test case, your program should print the minimal possible n (1<=n) to obtain k with the above formula.
Print a blank line between the outputs for two consecutive test cases.
示例输入
2 12 -3646397
示例输出
7 2701
#include<iostream>
using namespace std;
int main()
{
int k;
int cas;
int temp;
int n;
int temp2;
int i;
cin>>cas;
while(cas--)
{
cin>>k;
k=abs(k);
for(i=0;;i++)
{
temp=i*(i+1)/2;
if(temp>k) break;
}
n=i;
for(i=0;;i++)
{
temp2=n*(n+1)/2-k;
if(temp2%2==0) break;
n++;
}
cout<<n<<endl;
if(cas) cout<<endl;
}
return 0;
}