奇怪的方式:c++求解奇怪的方式

1.问题的重述

标题:奇怪的分式

上小学的时候,小明经常自己发明新算法。一次,老师出的题目是:

1/4 乘以 8/5

小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1.png)

老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼!

对于分子、分母都是 1~9 中的一位数的情况,还有哪些算式可以这样计算呢?

请写出所有不同算式的个数(包括题中举例的)。

显然,交换分子分母后,例如:4/1 乘以 5/8 是满足要求的,这算做不同的算式。

但对于分子分母相同的情况,2/2 乘以 3/3 这样的类型太多了,不在计数之列!

注意:答案是个整数(考虑对称性,肯定是偶数)。请通过浏览器提交。不要书写多余的内容。

2.问题的分析

   根据问题的描述可恶意得知:假设有a,b,c,d四个数,(a,b,c,d)的取值范围都是在{1,2,3,4,5,6,7,8,9}中,并且分子不能等于分母,假设s=a/b;s1=c/d;那么我们可以得到以下关系式:

                                                     奇怪的方式:c++求解奇怪的方式

3.思路 

        通过循环遍历这四个数a,b,c,d;然后通过上述问题的分析所得的关系式来判断即可求解。

           注意:在循环遍历时已经包括了上述的的第二个条件,即   奇怪的方式:c++求解奇怪的方式 ,所以不需要再继续判断。

源代码如下:

#include "stdafx.h"
#include<iostream>
using namespace std;

int fun()
{
	int count = 0;
	for(int a=1;a<=9;a++)
		for (int b = 1; b <= 9; b++)
			for (int c = 1; c <= 9; c++)
				for (int d = 1; d <= 9; d++)
				{
					if (a == b&&c == d)continue;
						int s = (a * 10 + c);
						int s1 =(b * 10 + d);
						if ((a*1.0 / b)*(c*1.0) / d == (s*1.0 / s1*1.0))count++;
				}
	cout << count << endl; 
		return 0;
}
int main()
{
	fun();
    return 0;
}

最后的结果为:14

如下图: 

奇怪的方式:c++求解奇怪的方式