蓝桥杯---一步之遥

题目:从昏迷中醒来,小明发现自己被关在 X 星球的废矿车里。 矿车停在平直的废弃的轨道上。 他的面前是两个按钮,分别写着 “F” 和 “B” 。

小明突然记起来,这两个按钮可以控制矿车在轨道上前进和后退。 按 F,会前进 97 米。按 B 会后退127 米。 透过昏暗的灯光,小明看到自己前方 1 米远正好有个监控探头。 他必须设法使得矿车正好停在摄像头的下方,才有机会争取同伴的援助。 或许,通过多次操作 F 和 B 可以办到。

矿车上的动力已经不太足,黄色的警示灯在默默闪烁… 每次进行 F 或 B 操作都会消耗一定的能量。 小明飞快地计算,至少要多少次操作,才能把矿车准确地停在前方 1 米远的地方。

请问为了达成目标,最少需要操作的次数是多少。

根据题目可以列出方程 97x+127y = 1

看出是裴蜀等式 ax+by = m

使用欧几里得算法扩展对gcd进行改造 最后求的x,y次数相加

import java.util.*;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int a = input.nextInt();
        int b = input.nextInt();
        int m = input.nextInt();
        linearEquation(a,b,m);
    }
    public static void linearEquation(int a,int b,int m){
        int d = ext_Gcd(a,b);
        if(m%d != 0){
            System.out.println("无解");
            return;
        }
        int n = m/d;
        x = x*n;
        y = y*n;
        System.out.println(Math.abs(x)+Math.abs(y));
    }
    static int x;
    static int y;
    public static int ext_Gcd(int a,int b){
        if(b == 0){
            x = 1;
            y = 0;
            return a;
        }
        int res = ext_Gcd(b,a%b);
        int x1 = x;
        x = y;
        y = x1 - a / b * y;
        return res;
    }
}


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值