2014蓝桥杯C语言第六题 --回溯算法解决

来源:互联网 发布:捷易通软件 编辑:程序博客网 时间:2024/05/16 04:09

/*上小学的时候,小明经常自己发明新算法。一次,老师出的题目是:    1/4 乘以 8/5     小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1.png)    老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼!    对于分子、分母都是 1~9 中的一位数的情况,还有哪些算式可以这样计算呢?    请写出所有不同算式的个数(包括题中举例的)。    显然,交换分子分母后,例如:4/1 乘以 5/8 是满足要求的,这算做不同的算式。    但对于分子分母相同的情况,2/2 乘以 3/3 这样的类型太多了,不在计数之列!注意:答案是个整数(考虑对称性,肯定是偶数)。请通过浏览器提交。不要书写多余的内容。*/#include "stdio.h"#include "stdlib.h"#include "math.h"#define     exp 10e-10   void main(){        int s = 0;        int a[5] , i ,k ;        i =  1,a[1] = 1 ;   while(1){                int     g = 1;                double  z = 0 , f = 0 , r = 0;   if(i == 4 && g == 1 &&  ( a[1] != a[2]  || a[3] !=  a[4] )){     z =  a[1] * 1.0 / a[2];   f =  a[3] * 1.0 / a[4];   r =  ( a[1]*10 + a[3] )*1.0/( a[2] * 10 + a[4]);       //满足条件输出                        if( fabs(z*1.0 * f - r) < exp){                        s++;                        //printf("%d / %d * %d / %d = %d%d/%d%d\n",a[1],a[2],a[3],a[4], a[1],a[3],a[2],a[4]);                        }   }   if( i < 4 && g ==1){   i++ ;    a[i] = 1;   continue;   }   while(a[i] == 9 && i>1) i --;   if(a[i] == 9 && i == 1) break;   else a[i]++;   }   printf("content : %d\n", s);   }


0 0