CSU 1209 Three Jugs (数论)

1209: Three Jugs

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 304   Solved: 57
[ Submit][ Status][ Web Board]

Description

    We have three jugs A, B, C without any calibration, and an infinite supply of water. There are three types of actions that you can use:
     (1) Fill a jug.
     (2) Empty a jug.
     (3) Pour from one jug to another.
    Pouring from one jug to another stops when the first jug is empty or the second jug is full, whichever comes first. For example, if A has 5 gallons, B has 6 gallons and a capacity of 8, then pouring from A to B leaves B full and 3 gallons in A.
    Now you need to calculate the minimum accurate gallons of water we can get by using the three jugs.


Input

    There is an integer T (1 <= T <= 200) in the first line, means there are T test cases in total.
    For each test case, there are three integers a, b, c (1 <= a, b, c <= 10^18) in a line, indicate the capacity (unit: gallon) of the three jugs.


Output

    For each test case, you should print one integer in a line, indicates the minimum accurate gallons of water we can get by using the three jugs.


Sample Input

2
3 6 9
6 10 15

Sample Output

3
1

HINT

Source

CSU Monthly 2013 Apr.


题意:

有三个瓶子,可以往里面倒水,也可以三个之间互相倒水,但当一只瓶里水满或另一瓶子水空时停止。

问经过任意步骤后,可从某一瓶子里倒出来的最少的水量。

例如第2个例子:

1)  1瓶子和2瓶子先装满水

2)  1瓶子往3瓶子里倒完水,1瓶子空,3瓶子里6加仑水

3)2瓶子往3瓶子里倒9加仑水,3瓶子满,2瓶子剩1加仑水

4)可从2瓶子里倒出1加仑水

思路:

对三个数求GCD


/*************************************************************************
	> File Name: I.cpp
	> Author: BSlin
	> Mail:  
	> Created Time: 2013年10月03日 星期四 17时56分26秒
 ************************************************************************/

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <iterator>
#include <vector>
#include <map>
#include <set>
#include <stack>
#include <queue>
#define MP make_pair
#define INF (1<<30)
#define PI acos(-1.0)
#define esp 1e-8
const int dx[4]={0,0,0,0};
using namespace std;
#define read freopen("in.txt","r",stdin)
#define write freopen("out.txt","w",stdout)
#if defined (_WIN32) || defined (__WIN32) || defined (WIN32) || defined (__WIN32__)
#define LL __int64
#define LLS "%" "I" "6" "4" "d"
#else
#define LL long long
#define LLS "%" "l" "l" "d"
#endif



LL gcd(LL a, LL b) {
    if(b == 0) return a;
    return gcd(b,a%b);
}

int main(int argc, char** argv) {
    int t;
    LL a,b,c;
    scanf("%d",&t);
    while(t--) {
        scanf(LLS LLS LLS,&a,&b,&c);
        printf(LLS"\n",gcd(gcd(a,b),c));
    }
    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值