Leetcode 365. Water and Jug Problem

Water and Jug Problem

You are given two jugs with capacities x and y litres. There is an infinite amount of water supply available. You need to determine whether it is possible to measure exactly z litres using these two jugs.

If z liters of water is measurable, you must have z liters of water contained within one or both buckets by the end.

  一句话理解题意:有容积为x和y升的俩水壶,能不能量出z升的水。
  我刚开始看到这题,立马就想了下暴力搜索的可能性,但考虑了下数据大小,立马放弃这个暴力的想法,于是意识到肯定有比较简单的数学方法,其实我自己没想到,后来看还是看了别人的代码,很多博客都直接给出了解法, 但没介绍为什么能这么解。所以我决定解释下我自己的思路。
  首先可以肯定的是只有xy俩水壶,大于x+y的水肯定是量不出来的,这个没啥大问题。重点是为什么只要x和y的最大公约数能整除z就可以量出z呢? 这里我只找到了一个裴蜀定理 来解释了。

public class Solution {
    private int gcd(int x, int y) {
        if (x%y == 0)
            return y;
        return gcd(y, x%y);
    }
    public boolean canMeasureWater(int x, int y, int z) {
        if (x+y < z)
            return false;
        if (x == 0 || y == 0)
            return x == z || y == z;
        int a = gcd(x, y);
        return z%a == 0;
    }
}
发布了233 篇原创文章 · 获赞 567 · 访问量 50万+
展开阅读全文

ACM一道题,C语言,已经精疲力竭 求大神找出错误,啊啊啊

12-13

问题如下 Problem Description ACM比赛剩下最后10分钟,其他人都已经收拾好东西准备走人,Zyj才从睡梦中醒来。Zyj可以看到所有其他人的过题情况,他希望得到的名次在a到b之间,问有几种可选择的方案?(假设其他人的提交时间即使加上罚时也早于Zyj的提交,毕竟剩下10分钟了都) Input 第一行为T(0<T<100),代表有T组数据。 每组数据中第一行为两个数字m n a b,由空格隔开,代表这次比赛有m道题(由于字母数量的限制,0<m<27),n个其他人,Zyj希望得到的名次x满足a<x<b (-1<n,a,b<1000) 下面n行为每个人每道题的通过情况,1为已通过,0为未通过 Output 对每个样例,输出Case #k: ans,其中k为样例编号,ans为方案数量。 Sample Input 2 26 1 0 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 26 1 0 2 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 (Case #1是25个1 1个0,#2是1个0 24个1 1个0) Sample Output Case #1: 1 Case #2: 27 样例解释: Case #1中Zyj必须AK(全部题都做出来)才可以得到大于0小于2的名次,即第1名。不要怕他做不完,那可是Zyj Case #2中Zyj可以AK,也可以任意选一道不做 ACM排名规则见http://scnuacm2015.sinaapp.com/php/presentation.php Author SCNU20102200088 我的代码 #include<stdio.h> #include<math.h> int main() { long long int a,c,d,e,f,g,h,i,j,m,p,q,r,s; scanf("%I64d",&r); s=r; while(r--) { scanf("%I64d%I64d%I64d%I64d",&a,&e,&h,&i); long long int b[100000]={0}; b[0]=a; f=e; if(f!=0) { p=0; while(e--) { for(c=0;c<a;c++) { scanf("%I64d",&d); b[e+1]=b[e+1]+d; } } for(c=1;c<f+1;c++) for(e=1;e<f-c+1;e++) { if(b[e]<b[e+1]) { g=b[e]; b[e]=b[e+1]; b[e+1]=g; } } for(c=h;c<i-1;c++) { for(e=b[c+1]+1;e<=b[c];e++) { q=e; m=1; if(q>a/2) q=a-q; for(j=a-q+1;j<=a;j++) m=m*j; for(j=1;j<=q;j++) m=m/j; p=p+m; } if(c==f) p++; } } else { if(h==0) p=pow(2,a); else p=0; } printf("Case #%d: ",s-r); printf("%I64d\n",p); } return 0; } 每次提交都WA不知如何是好 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 猿与汪的秘密 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览