首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

倒水有关问题

2014-01-01 
倒水问题庞果网上看到的然后自己写了一个,可是有点问题,有的时候正常有的时候死循环求教啊import java.uti

倒水问题
庞果网上看到的
然后自己写了一个,可是有点问题,有的时候正常有的时候死循环求教啊
import java.util.*;
public class Lianxi1
{
  
    public static void main(String[] arge)
     {
           int a,b,c;
           a=(int)(Math.random()*1000000);
                  System.out.print("生成A为:"+a);
          
          b=(int)(Math.random()*1000000);
          System.out.print("生成B为:"+b);
 
          c=(int)(Math.random()*1000000);
          System.out.print("生成C为:"+c);
         System.out.println("水缸是否刚好有C升水?");
      System.out.println(a+b+c);//测试程序进行
         boolean bl=Lianxi1.can(a,b,c); //判断是否能成功
        System.out.println(bl);    
     }
  public static boolean can(int a,int b,int c)
  {    
         
      int sum=0;
       int d=0;
      int difference=0;
      int c2=0;
       if(a<b)
        {
           d=a;
           a=b;
           b=d;
         }
        difference=a-b;
      if(b%difference!=0||c%difference==0){
       while(sum!=c)
        {
             
                if(difference<c-sum)
                     {
                         sum+=difference; 
                        
                      }else{
                            int b2=0,a2=0;
                         while(difference!=c-sum)
                          {  
                               c2=difference;
                               b2=b-c2;
                               a2=a-b2  ;
                                difference=a2-b;
                          }
                           sum+=difference;
                             
                          } 
        }
      return true;
      }else{ return false;}
   }
}


[解决办法]

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


你思路不对,用穷举法搜索整个状态空间,本来就行不通,数字稍大点程序就完蛋!

这题需要数论的知识,我简单提示一下,

用辗转想除法,先计算gcd(A,B),如果=1,说明互质,那么根据数论里的定理,
AB一定能配出一个1升来,C无论是多少,一定配得出来,直接返回true。

留个思考题给你,
如果AB不互质的,如何直接计算哪些C是可以配出的呢?(提示,和gcd有关)

热点排行