[蓝桥省题](C2013_2) 马虎的算式

小明是个急性子,上小学的时候经常 把老师写在黑板上的题目抄错了。
有一次,老师出的题目是: 36 x 495 = ?
他却给抄成了: 396 x 45 = ?
但结果却很戏剧性,他的答案竟然是对的! !
因为36 495=396 45=17820
类似这样的巧合情况可能还有很多,比如: 27 594 = 297 54
假设a b c d e代表1-9不同的5个数字(注意是各不相同的数字,且不含0)
能满足形如: ab cde = adb ce这样的算式一共有 多少种呢?
请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。

题意:一共是五个数字,a、b、c、d、e均为1-9中的数字的,且不重复,需要满足ab cde = adb ce这个条件

思路:这就是一道计数题,也是枚举出所有有可能的排列组合能满足上述算式,如果满足则计数变量加1,由于是填空题,不需要考虑其性能,我们第一步就是想能不能暴力枚举,当然是可以的,我们可以其五重for循环,让其测试五个变量所有的排列组合,在循环过程中,满足条件的数自然就会被枚举出来。

代码如下所示:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int ans = 0;
    for (int a = 1; a <= 9; a++)//枚举a
        for (int b = 1; b <= 9; b++)//枚举b
            if (a != b)//不能重复
                for (int c = 1; c <= 9; c++)//枚举c
                    if (c != a && c != b)
                        for (int d = 1; d <= 9; d++)//枚举d,下面类同
                            if (d != a && d != b && d != c)
                                for (int e = 1; e <= 9; e++)
                                    if (e != a && e != b && e != c && e != d)
                                        if ((a * 10 + b) * (c * 100 + d * 10 + e) == (a * 100 + d * 10 + b) * (c * 10 + e))
                                        {
                                    //可用于检测    //    printf("(%d*10+%d)*(%d*100+%d*10+%d)==(%d*100+%d*10+%d)*(%d*10+%d)=%d\n", a, b, \
                                                c, d, e, a, d, b, c, e, (a * 10 + b) * (c * 100 + d * 10 + e));
                                            ans++;
                                        }
    printf("%d", ans);
    system("pause");
    return 0;
}

运行结果:

img

教学视频如下所示:

<video controls="" src="https://axuannote-1304271763.cos.ap-nanjing.myqcloud.com/%E8%93%9D%E6%A1%A52013_2.mp4";></video>

本文链接:

https://nullcode.fun/91.html
1 + 4 =
快来做第一个评论的人吧~