蓝桥杯算法提高VIP-连接乘积

题目

题目链接

题解

在这里插入图片描述
在这里插入图片描述

代码

#include<bits/stdc++.h>
using namespace std;
const int N = 1e3;

string ans[N]; // 排序输出
int vis[10], cnt;
map<string, bool> mp; // 找过的字符串就不再添加到ans数组中了

bool cmp(string a, string b) {
	return a < b;
}

int main()
{
	ans[++cnt] = "123456789";
	ans[++cnt] = "918273645";
	for(int i = 100;i <= 333;i ++) { // 三位数 * 1~3
		memset(vis, 0, sizeof vis); 
		int x = i, y = i*2, z = i*3, sum = 0;
		string s;
		while(z) { vis[z%10] = 1; s=char(z%10+'0') + s; z/=10; }
		while(y) { vis[y%10] = 1; s=char(y%10+'0') + s; y/=10; }
		while(x) { vis[x%10] = 1; s=char(x%10+'0') + s; x/=10; }
		for(int i = 1;i < 10;i ++) sum += vis[i];
		if(sum == 9 && !mp[s]) ans[++cnt] = s, mp[s] = 1;
	} 
	
	for(int i = 5000;i < 10000;i ++) { // 四位数 * 1~2
		memset(vis, 0, sizeof vis);  
		int x = i, y = i*2, sum = 0;
		string s;
		while(y) { vis[y%10] = 1; s=char(y%10+'0') + s; y/=10; }
		while(x) { vis[x%10] = 1; s=char(x%10+'0') + s; x/=10; }
		for(int i = 1;i < 10;i ++) sum += vis[i];
		if(sum == 9 && !mp[s]) ans[++cnt] = s, mp[s] = 1;
	}

	sort(ans+1, ans+cnt+1, cmp);

	for(int i = 1;i <= cnt;i ++) puts(ans[i].c_str());
		
	return 0;
}
/*
123456789 // 
192384576
219438657
273546819
327654981
672913458
679213584
692713854
726914538
729314586
732914658
769215384
792315846
793215864
918273645 //
926718534
927318546
932718654
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不牌不改

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值