while(sum!=c)有问题,还有题目也没有,不知道你在判断啥

解决方案 »

  1.   

    有两个容器,容积分别为A升和B升,有无限多的水,现在需要C升水。
    我们还有一个足够大的水缸,足够容纳C升水。起初它是空的,我们只能往水缸里倒入水,而不能倒出。
    可以进行的操作是:
    把一个容器灌满;
    把一个容器清空(容器里剩余的水全部倒掉,或者倒入水缸);
    用一个容器的水倒入另外一个容器,直到倒出水的容器空或者倒入水的容器满。
        问是否能够通过有限次操作,使得水缸最后恰好有C升水。输入:三个整数A, B, C,其中 0 < A , B, C <= 1000000000
    输出:0或1,表示能否达到要求。函数头部:
    c语言:1表示可以,0表示不可以
    int can(int a,int b,int c);
    c++语言: true表示可以,false表示不可以
    bool can(int a,int b,int c);
    java语言:true表示可以,false表示不可以
    public class Main {
        public static boolean can(int a,int b,int c);
    }
      

  2.   

      while(difference!=c-sum)出问题
    一旦不等 二者进到这个循环 数据就不变了,也就永远出不来了
      

  3.   


    你思路不对,用穷举法搜索整个状态空间,本来就行不通,数字稍大点程序就完蛋!这题需要数论的知识,我简单提示一下,用辗转想除法,先计算gcd(A,B),如果=1,说明互质,那么根据数论里的定理,
    AB一定能配出一个1升来,C无论是多少,一定配得出来,直接返回true。留个思考题给你,
    如果AB不互质的,如何直接计算哪些C是可以配出的呢?(提示,和gcd有关)
      

  4.   


    地球人都知道gcd(A,B)求最大公约数 ,为1 为质数。 
    那么 A=5,B=7 ,你给我配个C=1 出来试试呗
      

  5.   

    最大公约数的倍数 gcd(a,b)*n, n=1,2. 至最大值
      

  6.   


    地球人都知道gcd(A,B)求最大公约数 ,为1 为质数。 
    那么 A=5,B=7 ,你给我配个C=1 出来试试呗A=5,B=7
    (0,7)
    (5,2)
    (0,2)
    (2,0)
    (2,7)
    (5,4)
    (0,4)
    (4,0)
    (4,7)
    (5,6)
    (0,6)
    (5,1)
    B=1骚年啊,不要挑战数学定理啊。思考题想出来了码?
      

  7.   


    地球人都知道gcd(A,B)求最大公约数 ,为1 为质数。 
    那么 A=5,B=7 ,你给我配个C=1 出来试试呗A=5,B=7
    (0,7)
    (5,2)
    (0,2)
    (2,0)
    (2,7)
    (5,4)
    (0,4)
    (4,0)
    (4,7)
    (5,6)
    (0,6)
    (5,1)
    B=1骚年啊,不要挑战数学定理啊。思考题想出来了码?
    厉害,我刚放上去就感觉不对了
      

  8.   

    不是吧,哪个说解这道题还要用离散数学、基础数论,高等代数、群环域、等价类……?用不着吧题目要求:容量为a的杯子和容量为b的杯子称量出容量c的水(假设a<b)
    等价于求解二元一次方程a*x+b*y=c
    首先,将c对a*b取模,将c的大小限制在a*b之内
    然后将方程化为a*x=c-b*y
    从y=-a循环到y=a(因为c<a*b),若能找到a的倍数,即有解,否则无解。
    =======
    举例:a=5,b=7,c=1
    则5*x=1-7*y
    从y=-5遍历到y=5,发现5*3=1-7*(-2)和5*(-4)=1-7*3两个解
    答:1=15-14=21-20
    =======
    呵呵,这是一个纯数学题啊,跟这个http://bbs.csdn.net/posts/395218489一样,靠数学解决的
      

  9.   


    朋友,所谓取模,不就是划分等价类吗?
    而这些等价类,加上运算符不就是群或域吗?
    至于a*x+b*y=c 线性方程的整数解,不是基础数论的研究题目之一吗?多学点数学,以后碰到这类问题才能高屋建瓴。
      

  10.   

    我…这刹那我震惊了。原来这么简单的思路也可以有这么专业的名词,哎~自叹不如啊,我真心不懂那些词汇。跟我当年听到XSS攻击时一样震惊,我当年发现某网站XSS漏洞的时候压根就不知道这个词汇……汗颜
      

  11.   

    下面是我的代码,不知道为何通不过,想不通,高人请指点bool can(int a,int b,int c) {
        bool br = false;cout<<a<<" "<<b<<" "<<c<<endl;
    if(a==b){
        if(c%a==0) {cout<<c<<"="<<c/a<<"*"<<a; return true;}
        else return false;
    }
    if(b<a){int t=b; b=a;a=t;}
    int k=b/a;
    if(b%a>0)k++;
    else k--;
    int akm2,akm1;
    if(b%a>0){
    akm2=b-a*(k-1);
    akm1=b-a*k;
    }
    else{ 
    if(c%a>0) return false;
    else {cout<<c<<"="<<c/a<<"*"<<a<<endl; return true;}
    }
    int n1 = c/akm1;
    int n2 = c/akm2;
    for(int i=n1;i<=n2;i++){
        if((c-i*b)%a==0){
            cout<<c<<"="<<(c-i*b)/a<<"*"<<a<<"+"<<i<<"*"<<b<<endl;
            return true;
        }
    }
    return br;
    }
      

  12.   

    失误~\(≧▽≦)/~啦啦啦,没看清题
    还真是可以,A倒到B中3次,首次倒满时,B倒空就行了,二次倒满后,A中剩余的是1L