zoj1003 crashing balloon

转载 2015年11月19日 23:10:29
  1. #include<stdio.h>
    int flag1, flag2;	//分别表示n, m是否已被成功分解
    void dfs(int n, int m, int fac = 100){
    	if(flag1)	//如果n, m均可分解且因子不同
    		return;
    	if(n == 1 && m == 1){	//n, m均分解完
    		flag1 = 1;
    		flag2 = 1;
    		return;
    	}
    	if(m == 1){ //m分解完
    		flag2 = 1;
    	}
    	if (fac < 2)
    		return;
    	if(n % fac == 0)	//精华之处,对同一个因子不同时分解n, m,难点解决
    		dfs(n / fac, m, fac - 1);
    	if(m % fac == 0)
    		dfs(n, m / fac, fac - 1);
    	dfs(n, m, fac - 1);
    }
     
    int main(){
    	int n, m;
    	while(~scanf("%d%d", &n, &m)){
    		if(m > n){ //交换m, n
    			n = m ^ n;
    			m = m ^ n;
    			n = m ^ n;
    		}
    		flag1 = 0;
    		flag2 = 0;
    		dfs(n, m);
    		if(flag1 || !flag2)	//如果n成功分解货m无法成功分解
    			printf("%d\n", n);
    		else
    			printf("%d\n", m);
    	}
    	return 0;
    }

    //内容来自ConwayTian
  2. /*
  3. blog上一大把,copy,但很多copy的并不是那么好。
  4. */
  5. #include<cstdio>  
  6. #include<algorithm>  
  7. using namespace std;  
  8.   
  9. bool f1, f2;  
  10.   
  11. void dfs(int numa, int numb, int k)  
  12. {  
  13. /*
  14. 解决这个问题时也知道使用递归,但怎么用并不明确,缺少练习。
  15. 解决这个问题,如果把两个数据分别处理,处理量就大了,所以如果能将数据在一块处理,也是蛮好的
  16. */
  17.     if(numb == 1)  
  18.     {  
  19.         f2 = true;  
  20.         if(numa == 1) f1 = true;  
  21.         /*在numb分解完成的情况下,查看numa是否可以分解。 
  22.           这样可以保证某些公因子被numb用了,便不能再被numa用*/  
  23.     }  
  24.   
  25. /*
  26. 还有就是对递归实际代码的理解了,总是认为递归进去,也会出来的,总是在想怎样处理进出关系。
  27. 下边的主要是,把k占住了,代码的设计就是让递归一直下去(这正是数据处理的过程,下走的时候
  28. ,若有公因子,则只能a使用),当都
  29. */
  30.     if(k == 1 || (f1 && f2)) return;  /*要么没有分解完,要么都分解完了,才会停止向下
  31. 递归,开始往回走,回走的过程也会处理一些数据但已经不需要了
  32. 1、都分解完了,
  33. 2、b分解完了,a没有,到底了
  34. 3、b就没分解完,根据题目要求,b的申诉就失败了
  35. */
  36.     if(numa % k == 0) dfs(numa / k, numb, k - 1); //因子k,被a用不被b用  
  37.     if(numb % k == 0) dfs(numa, numb / k, k - 1); //因子k,被b用不被a用  
  38.     dfs(numa, numb, k - 1); //因子k,既不被a用也不被b用  
  39. }  
  40.   
  41. int main()  
  42. {  
  43.     int a, b;  
  44.     while(scanf("%d%d",&a,&b) != EOF)  
  45.     {  
  46.         if(a < b) swap(a, b);  
  47.         f1 = f2 = false;  
  48.         dfs(a, b, 100);  
  49.         if(!f1 && f2) printf("%d\n",b);  
  50.         else printf("%d\n",a);  
  51.     }  
  52.     return 0;  
  53. }  


相关文章推荐

ZOJ 1003 Crashing Balloon

题目来源:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3 这是一道模拟题! #include #include #in...

ZOJ 1003 Crashing Balloon

Description On every June 1st, the Children's Day, there will be a game named "crashing balloon" ...

ZOJ1003 Crashing Balloon

Crashing Balloon Time Limit: 2 Seconds      Memory Limit: 65536 KB On every June 1st, the Chil...

ZOJ--1003:Crashing_Balloon(因子分解)

On every June 1st, the Children's Day, there will be a game named "crashing balloon" on TV.   The ru...
  • yf224
  • yf224
  • 2017-06-05 21:06
  • 87

ZOJ1003 Crashing Balloon

虽说是深搜,但是自己的代码总是wa。。。 上网看了一些代码,基本上都是同一个样子 膜拜ing。。。 /******************************************...

ZOJ 1003 Crashing Balloon

题意:对于给定的两个数字,如果对于任意两个数字在1−1001-100的范围内的分解因子(每个数字只能用一次)均有相同的因子,则输出大的数字,反之输出小的。思路:dfsdfs,将每个数字的所有分解方法存...

zoj1003Crashing Balloon

Crashing Balloon Time Limit: 2 Seconds      Memory Limit: 65536 KB On every June 1st, the Chil...
  • z8110
  • z8110
  • 2015-08-05 20:14
  • 220

1003 Crashing Balloon

Crashing Balloon Time Limit: 2 Seconds      Memory Limit: 65536 KB On every June 1st, the C...

浙大ACM 1003 Crashing Balloon

这题当时一开始想的很简单,然后碰壁了,后来用递归搞定的。现在拿来看看代码 Crashing Balloon Time Limit: 2 Seconds      Memory Limi...

Crashing Balloon from http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3

On every June 1st, the Children's Day, there will be a game named "crashing balloon" on TV.   The ru...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)