首页 > 代码库 > 神奇的数列之“Last Defence ”

神奇的数列之“Last Defence ”

题目大意:给你两个数字,之后的每个数字都等于这两个数字之差的绝对值。问这列数字有多少个不同的数字。

样例输入/输出: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.

神奇的数列之“Last Defence ”