540A: Combination Lock
2015-07-25 20:27
246 查看
题目链接:http://codeforces.com/problemset/problem/540/A
题意:
输入的两个长度一样的数,求对应位置的某位数到下一个数需要最小的步长,每次只能先前或先后走以步,求所有的步长的的和。(如下例)
Sample test(s)
input
output
解题:
这个很简单,暴力破解
可以把数字0-9是个长度是10的循环,对于任意两个数之间的最小距离就等于:min{|a-b|,|10-|a-b||}
对于两个数之间的距离很容易想到是 :|a-b|,但是这个要求的最小距离,a绕一圈回来的距离是10,若按照一定方向走:a->b ,b->a 的距离也是10,则就有了 |10-|a-b||这个b->a的距离;我们要求的是最小距离,所以要在这个两个距离中取最小值
Java程序:
题意:
输入的两个长度一样的数,求对应位置的某位数到下一个数需要最小的步长,每次只能先前或先后走以步,求所有的步长的的和。(如下例)
Sample test(s)
input
5 82195 64723
output
13
解题:
这个很简单,暴力破解
可以把数字0-9是个长度是10的循环,对于任意两个数之间的最小距离就等于:min{|a-b|,|10-|a-b||}
对于两个数之间的距离很容易想到是 :|a-b|,但是这个要求的最小距离,a绕一圈回来的距离是10,若按照一定方向走:a->b ,b->a 的距离也是10,则就有了 |10-|a-b||这个b->a的距离;我们要求的是最小距离,所以要在这个两个距离中取最小值
Java程序:
import java.util.Scanner; public class A540 { static void run0(){ Scanner in = new Scanner(System.in); int n = in.nextInt(); String before = in.next(); String end = in.next(); int sum = 0; for(int i =0;i<n;i++){ int a = (int)before.charAt(i); int b= (int)end.charAt(i); sum = sum + Math.min(Math.abs(a-b), Math.abs(10-Math.abs(a-b))); } System.out.println(sum); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub run0(); } }
相关文章推荐
- Spring中实现多数据源事务管理
- 编程之美1.6 饮料供货[动态规划vs贪心算法]
- Convert Sorted Array to Binary Search Tree
- HDU4421 Bit Magic 【2-sat】
- 540C: Ice Cave
- 计算机网络基础知识一
- 基于TR069协议实现IPTV盒端管理
- 1-9这9个数字组成并且都只出现一次 ,第一位能被1整除,前两位能被2整除
- 关于Java与c++隐藏、重写不同实现机制的探讨
- 大一这一年
- OC_属性
- HDU 2108 Shape of HDU(几何)
- UVA 12904 Load Balancing (暴力)
- window 安装MYSQL
- iOS设计模式 - 适配器
- apache的mpm工作模式
- backbone--requirejs--marionettejs--01
- Spiral Matrix
- HDU 5301 Buildings
- Windows安装mapnik