zoukankan      html  css  js  c++  java
  • The Balance

    【题目描述】

    有一种天平,两个托盘都可以放置砝码,但它只有两种重量的砝码A、B,现需要称出重量为C的物品,询问至少需要多少个砝码A、B,并且使其重量总和最小。

    【输入描述】

    输入多组数据,每组数据格式如下:

    输入三个数A、B、C(A ≠ B,A,B <= 10000,C <= 50000);

    最后一行输入“0 0 0”。

    【输出描述】

    对于每组数据,输出一行,包含两个数,分别表示砝码A、B的数量。

    【输入样例】

    700 300 200

    500 200 300

    500 200 500

    275 110 330

    275 110 385

    648 375 4002

    3 1 10000

    0 0 0

    【输出样例】

    1 3

    1 1

    1 0

    0 3

    1 1

    49 74

    3333 1

    源代码:
    
    #include<cstdio>
    int X,Y,T1,T2;
    int GCD(int t1,int t2)
    {
        return t2?GCD(t2,t1%t2):t1;
    }
    void ExGCD(int t1,int t2)
    {
        if (!t2)
        {
            X=1;
            Y=0;
        }
        else
        {
            ExGCD(t2,t1%t2);
            int t=X;
            X=Y;
            Y=t-t1/t2*Y;
        }
    }
    int main()
    {
        int A,B,C;
        while (~scanf("%d%d%d",&A,&B,&C))
        {
            if (!(A+B+C)) //特判。
              break;
            int D=GCD(A,B);
            A/=D;
            B/=D;
            C/=D;
            ExGCD(A,B); //老规矩。
            T1=(X*C%B+B)%B; //求x最小值。
            T2=(C-A*T1)/B; //更新y。
            T2*=T2<0?-1:1; //天平两旁都可放。
            Y=(Y*C%A+A)%A; //求y最小值。
            X=(C-B*Y)/A; //更新x。
            X*=X<0?-1:1; //天平两旁都可放。
            if (X+Y>T1+T2) //贪心比较。
            {
                X=T1;
                Y=T2;
            }
            printf("%d %d
    ",X,Y);
        }
        return 0;
    }
  • 相关阅读:
    WindowsManager 程序(一) 控制窗口的程序
    SQLServer导入导出资料的方法
    CSS收集(1)
    SQLReporting Service
    WindowsManager 程序(二)
    Microsoft 预发行软件 Visual Studio Team System 2008 测试版 2 Team Suite
    Ajax Pro 使用
    一个获取文件的ICON类
    MyCodeBar我的代码片段管理工具
    ADSL自动断拨号类
  • 原文地址:https://www.cnblogs.com/Ackermann/p/6001534.html
Copyright © 2011-2022 走看看