题目大意:给你两个数字,之后的每个数字都等于这两个数字之差的绝对值。问这列数字有多少个不同的数字。
样例输入/输出:input 7 4;output 6;
解题思路:此题使用辗转相除法的思想。首先两个数字x,y(假定y>x),则一定存在y=kx+b;例如100和7。
然后会发现这个数列是 100 7 93 86 7 79 72 7......那么这个数列中不同的数字应该是100/7个 最后会得到 7 2...... ;
然后重复上述动作,直至出现0;
AC代码:
import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); long T = sc.nextLong(); long k = 1L; while(T > 0){ long x = sc.nextLong(); long y = sc.nextLong(); long sum = 0L; long mod = -1L; if(x == 0 && y != 0){System.out.println("Case #" + k + ": 2");} else if(x != 0 && y == 0){System.out.println("Case #" + k + ": 2");} else if(x == 0 && y == 0){System.out.println("Case #" + k + ": 1");} else{ while(mod != 0){ if(x < y){long t = x;x = y;y = t;} sum = sum + x/y; mod = x%y; x = mod; } sum = sum + 1; System.out.println("Case #" + k + ": " + sum); } k = k + 1;T = T - 1; } } }
一定要注意若是两个数字有一个是0,那么输出2,都是0,输出1.
时间: 2024-10-16 15:07:09