2019 蓝桥杯省赛 B 组模拟赛(四) 程序设计:除法表达式

本文探讨了一道通过暴力破解寻找ABCDE和DEFGH两组数字的问题,通过对DEFGH的范围进行分类讨论,分别考虑包含0和不包含0的情况,优化了算法效率,避免了超时问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:
在这里插入图片描述
在这里插入图片描述
代码如下:

#include<bits/stdc++.h>
using namespace std;
bool judge(int x,int y)
{
	int b[10] = {0};
	for(int i = 0;i < 5;i++){
		b[x % 10]++;
		x /= 10;
	}
	for(int i = 0;i < 5;i++){
		b[y % 10]++;
		y /= 10;
	} 
	for(int i = 0;i < 10;i++)
		if(b[i] != 1) return false;
	return true;
}
int main()
{
	int T,n;
	cin >> T;
	while(T--){
		cin >> n;
		bool flag = false;
		for(int i = 1234;i * n <= 98765;i++){
			if(judge(i,i * n) && (i <= 9876)){
				cout << i * n << "/0" << i << "=" << n << endl;
				flag = true;
			}
			if(judge(i,i * n) && (i >= 10234)){
				cout << i * n << "/" << i << "=" << n << endl;
				flag = true;
			}
		}
		if(!flag) cout << "No expression!" << endl;
	}
	return 0;
}

这道题用暴力写必定是会超时的,我们知道n的值,要算出ABCDE和DEFGH,那我们不妨先列举DEFGH的所有可能的值然后计算出ABCDE的值,如果这两个数所有位上的数都各不相同,那就输出。这里列举分为2种情况,第一种时DEFGH种包含0的,那么它的范围应该[01234,09876]。还有第二种就是不包含0这位数字的,那么范围应该在[10234,98765]。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值