Java程序练习-放球
2011-10-11 10:46
190 查看
放球
时间限制: 10000ms内存限制: 1024kB
描述
有两堆球,一堆有A个球,另一堆则有B个。每一次的操作就是从一堆中拿出一些球放入另一堆,但拿出来的球的个数一定要等于原先“另一堆”中球的数目。问将一堆的球全部放入另一堆至少要多少次:或者根本不可能?
输入
A B
输出
共一行。
若可以移动,则输出移动次数,若不可能,则输出-1。
样例输入
40 24
样例输出
3
提示
其它例子:
16 24
-1
4095 1
12
参考代码
零时の迷子:
我的方法是用数学归纳出来的(a+b)\他们的最大公约数的结果若是2的N次方则移动次数为N
Eric Zhou:
谢谢,过了几天我再来看这个问题时,发现不是设计算法的问题,而是在读入数据时类型错误,正确的读入类型是cin.nextLong()。
long a = cin.nextInt();--X
long b = cin.nextInt();--X
算法的大概思路就是模拟整个交换过程.
Eric Zhou:
非常感谢 零时の迷子。
时间限制: 10000ms内存限制: 1024kB
描述
有两堆球,一堆有A个球,另一堆则有B个。每一次的操作就是从一堆中拿出一些球放入另一堆,但拿出来的球的个数一定要等于原先“另一堆”中球的数目。问将一堆的球全部放入另一堆至少要多少次:或者根本不可能?
输入
A B
输出
共一行。
若可以移动,则输出移动次数,若不可能,则输出-1。
样例输入
40 24
样例输出
3
提示
其它例子:
16 24
-1
4095 1
12
参考代码
/* * Title :Exchange balls * From :http://nnsznoi.openjudge.cn/lst/5/ * Time :2011-10-10 19:20PM * Author :Eric Zhou,binfeihan * Email :binfeihan@126.com */ import java.util.Map; import java.util.Scanner; import java.util.TreeMap; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); long a = cin.nextLong(); long b = cin.nextLong(); Map<Long,Integer>map = new TreeMap<Long,Integer>(); long min,max,cnt = 0; while(true){ min = Math.min(a, b); max = Math.max(a, b); if(map.containsKey(min)) break; else map.put(min, 1); if(min == 0) break; a = max - min; b = min * 2; cnt ++; } if(min == 0) System.out.println(cnt); else System.out.println(-1); } }后记
零时の迷子:
我的方法是用数学归纳出来的(a+b)\他们的最大公约数的结果若是2的N次方则移动次数为N
Eric Zhou:
谢谢,过了几天我再来看这个问题时,发现不是设计算法的问题,而是在读入数据时类型错误,正确的读入类型是cin.nextLong()。
long a = cin.nextInt();--X
long b = cin.nextInt();--X
算法的大概思路就是模拟整个交换过程.
Eric Zhou:
非常感谢 零时の迷子。
相关文章推荐
- JAVA程序练习---小车行走距离
- Java程序练习-Web浏览
- Java程序练习-长整数加法运算
- Java程序练习-Period
- Java程序练习-在顺序表中插入元素
- Java队列工具类(程序仅供练习)
- JAVA程序练习---小车行走距离
- Java程序练习-计数的梦
- Java程序练习-Web浏览
- Java程序练习-括号匹配
- Java程序练习-放球
- Java程序练习-单链表三类字符归类
- JAVA程序练习---小车行走距离
- Java程序练习-括号匹配
- java循环个人程序练习
- Java程序练习-C-封印之刃
- Java程序练习-Financial Management
- Android(java)学习笔记67:多线程程序练习
- Java程序练习-班级排名
- Java程序练习-删除元素