Steps
2015-08-02 10:08
225 查看
Steps
Description
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.
0
x
y
< 231. For each test case, print a line giving the minimum number of steps to get from
x to y.
大意:
给出X, Y求出X到Y所需的最小步数;
第一步和最后一步的步宽均为1,中间的每步都是前面的一步的步宽+1,+0,-1;
要点:
观察最小步数可发现
最小步数:0 1 2 3 4 5 6 7 8 9 10 11 12
个数:1 1 1 2 2 3 3 4 4 5 5 6 6
即最小步数为0的有1个数,最小步数为10有5个数;
除最小步数为0的外其他所对应的个数总和即是Y-X的值;
比如输入0 6则Y-X=6;
1+1+2+2 = 6 >= 6 则输出最后一个2所对应的4;
#include <stdio.h>
int main(){
int num;
int n1, n2;
scanf ("%d", &num);
getchar();
while (num --){
scanf ("%d %d", &n1, &n2);
getchar();
int step = n2 - n1;
int x = 0;
int min;
for (int i = 0, j = 0;; i++){
x += j;
if (x >= step){
min = i;
break;
}
else {
if (i % 2 == 0)
j++;
}
}
printf ("%d\n", min);
}
return 0;
}
Description
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 and Output
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
x to y.
Sample Input
3 45 48 45 49 45 50
Sample Output
3 3 4
大意:
给出X, Y求出X到Y所需的最小步数;
第一步和最后一步的步宽均为1,中间的每步都是前面的一步的步宽+1,+0,-1;
要点:
观察最小步数可发现
最小步数:0 1 2 3 4 5 6 7 8 9 10 11 12
个数:1 1 1 2 2 3 3 4 4 5 5 6 6
即最小步数为0的有1个数,最小步数为10有5个数;
除最小步数为0的外其他所对应的个数总和即是Y-X的值;
比如输入0 6则Y-X=6;
1+1+2+2 = 6 >= 6 则输出最后一个2所对应的4;
#include <stdio.h>
int main(){
int num;
int n1, n2;
scanf ("%d", &num);
getchar();
while (num --){
scanf ("%d %d", &n1, &n2);
getchar();
int step = n2 - n1;
int x = 0;
int min;
for (int i = 0, j = 0;; i++){
x += j;
if (x >= step){
min = i;
break;
}
else {
if (i % 2 == 0)
j++;
}
}
printf ("%d\n", min);
}
return 0;
}
相关文章推荐
- 黑马程序员——java中面向对象基础
- UVA10325--- The Lottery (容斥)
- 手把手带你自制Linux系统之一 准备工作
- phalcon——闪存消息
- 初探数据结构之“树”的定义和二叉树定义及性质
- java webservice实例教程
- 【leetCode】Search a 2D Matrix
- Hibernate学习(4)框架核心组件
- 初探数据结构之“树”的定义和二叉树定义及性质
- django notes 一:开篇
- 多部分和问题(多重背包+二进制优化)
- Android项目打包成APK文件
- Java IO学习【19】Java中字符编码解码小知识
- 单链表创建及其插入,删除,逆序
- 能为父母做的事
- LeetCode146:LRU Cache
- CodeForces 19D 离散化+线段树+set
- 希尔排序
- 双系统引导菜单设置
- Chromium 34 and later cannot detect flash plugin