zoukankan      html  css  js  c++  java
  • 倒水

    有两个容器,容积分别为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); }
    #include <vector>
    #include <map>
    #include <iostream>
    
    using namespace std;
    typedef vector<int>			vectTemp;
    
    
    
    bool Can(int a,int b,int c)
    {
    	int nMax = a;
    	int nMin = b;
    	if(a<b)
    	{
    		nMax = b;
    		nMin = a;
    	}
    	vectTemp MaxCan;
    	vectTemp MinCan;
    	MinCan.push_back(0);
    	MinCan.push_back(nMin);
    	MinCan.push_back(nMax%nMin);
    	MinCan.push_back(nMin-(nMax%nMin));
    	
    	MaxCan = MinCan;
    	MaxCan.push_back(nMax);
    	
    	if(c%a == 0 || c%b == 0 || c%(a+b) == 0)
    		return true;
    
    	if(c<nMax)
    	{
    		for (int i =0 ;i<MaxCan.size();++i)
    		{
    			for (int j =0 ;j<MinCan.size();++j)
    			{
    				if(MaxCan[i]-MinCan[j] == c)
    					return true;
    			}
    		}
    	}
    	else
    	{
    		for (int i =0 ;i<MaxCan.size();++i)
    		{
    			for (int j =0 ;j<MinCan.size();++j)
    			{
    				if(MaxCan[i]+MinCan[j] == c)
    					return true;
    			}
    		}
    	}
    	return false;
    }
    
    void main()
    {	
    	cout<<Can(3,5,4)<<"
    ";
    	system("pause");
    }
    

    答案自己写的仅供参考
  • 相关阅读:
    七大排序的个人总结2
    如何创建自定义的文件类型关联
    ajax原理,验证码生成原理
    读取同一文件夹下多个txt文件中的特定内容并做统计
    为已定图片加水印
    egrep -v "^#|^$"
    QSplashScreen无法背景透明的解决办法(强制StyleSheet生效)
    c++调用python
    Qt对话框_模态/非模态
    雷军:曾日写300个高质量帖 做互联网需7字诀
  • 原文地址:https://www.cnblogs.com/byfei/p/14104508.html
Copyright © 2011-2022 走看看