《算法设计与分析实用教程》习题参考解答.doc

《算法设计与分析实用教程》习题参考解答.doc

《算法设计与分析实用教程》习题参考解答

PAGE PAGE 33 《算法设计与分析实用教程》参考解答 (各习题的算法设计与数据测试仅供参考) 习题1 1-1 加减得1的数学游戏 西西很喜欢数字游戏,今天他看到两个数,就想能否通过简单的加减,使最终答案等于1。而他又比较厌烦计算,所以他还想知道最少经过多少次才能得到1。 例如,给出16,9:16-9+16-9+16-9-9-9+16-9-9=1,需要做10次加减法计算。 设计算法,输入两个不同的正整数,输出得到1的最少计算次数。(如果无法得到1,则输出-1)。 (1) 若输入两个不同的正整数a,b均为偶数,显然不可能得到1。 设x*a与y*b之差为“1”或“-1”,则对于正整数a,b经n=x+y-1次加减可得到1。 为了求n的最小值,令n从1开始递增,x在1——n中取值,y=n+1-x: 检测d=x*a+y*b,若d=1或-1,则n=x+y-1为所求的最少次数。 (2) 算法描述 // 两数若干次加减结果为1的数学游戏 #include stdio.h void main() {long a,b,d,n,x,y; printf( 请输入整数a,b: ); scanf(%ld,%ld,a,b); if(a%2==0 b%2==0) { printf( -1\n);return;} n=0; while(1) {

文档评论(0)

1亿VIP精品文档

相关文档