P1618 三连击(升级版)
题目描述
将 1,2,…,91,2,…,9 共 99 个数分成三组,分别组成三个三位数,且使这三个三位数的比例是 A:B:CA:B:C,试求出所有满足条件的三个三位数,若无解,输出 No!!!。
//感谢黄小U饮品完善题意
输入格式
三个数,A,B,CA,B,C。
输出格式
若干行,每行 33 个数字。按照每行第一个数字升序排列。
输入输出样例
输入 #1
1 2 3
输出 #1
192 384 576
219 438 657
273 546 819
327 654 981
说明/提示
保证 A<B<CA<B<C。
upd 2022.8.3upd 2022.8.3:新增加二组 Hack 数据。
题解
include<bits/stdc++.h>
using namespace std;
define ll long long
int A,B,C;
set
void solve(int a1,int a2,int a3){
int cA=100a1+10a2+a3;
int cB,cC;
if(cA%A!=0)
return;
cB=cA/AB;
cC=cA/AC;
if(cB>=1000||cC>=1000)
return;
int used[10];
for(int i=0;i<=9;i++)
used[i]=0;
used[a1]++;
used[a2]++;
used[a3]++;
while(cB){
used[cB%10]++;
cB/=10;
}
while(cC){
used[cC%10]++;
cC/=10;
}
for(int i=1;i<=9;i++){
if(used[i]!=1)
return;
}
ans.insert(cA);
}
int main(){
scanf("%d%d%d",&A,&B,&C);
if(A0){
puts("No!!!");
return 0;
}
for(int i=1;i<=9;i++){
for(int j=1;j<=9;j++){
if(ji)
continue;
for(int k=1;k<=9;k++){
if(kj||ki)
continue;
else{
solve(i,j,k);
}
}
}
}
if(ans.size())
for(auto i:ans){
printf("%d %d %d\n",i,i/AB,i/AC);
}
else{
printf("No!!!\n");
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理