LQ0205 马虎的算式枚举+进制
Posted 海岛Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0205 马虎的算式枚举+进制相关的知识,希望对你有一定的参考价值。
题目来源:蓝桥杯2013初赛 C++ B组B题
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。
有一次,老师出的题目是:36x495=?
他却给抄成了:396x45=?
但结果却很戏剧性,他的答案竟然是对的!!
因为 36∗495=396∗45=17820。
类似这样的巧合情况可能还有很多,比如:27∗594=297∗54。
假设a b c d e 代表 1 ~ 9 不同的 5 个数字(注意是各不相同的数字,且不含 0 )
能满足形如: ab∗cde=adb∗ce 这样的算式一共有多少种呢?
请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。
满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。
问题分析
枚举5位数,最小的各位数字不同的5位数是12345, 最大的各位数字不同的5位数是98765。
再根据进制原理进行判定。
AC的C语言程序如下:
/* LQ0205 马虎的算式 */
#include <stdio.h>
int main()
int cnt = 0;
for (int i = 12345; i <= 98765; i++)
int a = i / 10000;
int b = i / 1000 % 10;
int c = i / 100 % 10;
int d = i / 10 % 10;
int e = i % 10;
if (b == 0 || c == 0 || d == 0 || e == 0)
continue;
if (a == b || a == c || a == d || a == e ||
b == c || b == d || b == e ||
c == d || c== e || d == e)
continue;
if ((i / 1000) * (i % 1000) == (a * 100 + d * 10 + b) * (c * 10 + e))
cnt++;
printf("%d\\n", cnt);
return 0;
以上是关于LQ0205 马虎的算式枚举+进制的主要内容,如果未能解决你的问题,请参考以下文章