洛谷 三连击 暴力枚举
第一次代码:有一个样例超时!
题目描述
将 1,2,…,9 共 9 个数分成三组,分别组成三个三位数,且使这三个三位数的比例是 A:B:C,试求出所有满足条件的三个三位数,若无解,输出 No!!!
。
//感谢黄小U饮品完善题意
输入格式
三个数,A,B,C。
输出格式
若干行,每行 3 个数字。按照每行第一个数字升序排列。
输入输出样例
输入 #1复制
1 2 3
输出 #1复制
192 384 576 219 438 657 273 546 819 327 654 981
说明/提示
保证 A<B<C。
upd 2022.8.3:新增加二组 Hack 数据。
#include <bits/stdc++.h>
#define MX 100005
using namespace std;
int main() {
int a,b,c;
cin>>a>>b>>c;
int t = 0,f[10],ant = 0,t1,t2,t3,t4,cnt = 0;
for(int i = 1; i <= 9; i++) {
for(int j = 1; j <= 9; j++) {
if(i == j);
else {
for(int k = 1; k <= 9; k++) {
if( j != k && i != k) {
ant = 0;
t = i * 100 + j * 10 + k;
f[0] = 1;
f[i] = 1;
f[j] = 1;
f[k] = 1;
t1 = t * b / a;
t2 = t * c / a;
t3 = t1;
t4 = t2;
while(t3 != 0) {
if(f[t3 % 10] == 1 ) {
ant = 1;
break;
}
f[t3 % 10] = 1;
t3 = t3 / 10;
}
while(ant == 0 && t4 != 0) {
if(f[t4 % 10 ]== 1 ) {
ant = 1;
break;
}
f[t4 % 10] = 1;
t4 = t4 / 10;
}
if(ant == 0) {
cnt++;
cout<<t<<" "<<t1<<" "<<t2<<endl;
}
memset(f,0,sizeof(f));
}
}
}
}
}
if(cnt == 0)
{
cout<<"No!!!"<<endl;
}
return 0;
}
第二次代码:100分但是不AC!
有没有大佬能解释一下这是什么情况??
#include <bits/stdc++.h>
#define MX 100005
using namespace std;
int main() {
int a,b,c;
cin>>a>>b>>c;
int t = 0,f[100],ant = 0,t1,t2,t3,t4,cnt = 0;
for(int i = 123; i <= 987; i++) {
ant = 0;
memset(f,0,sizeof(f));
f[0] = 1;
t = i;
while(t != 0) {
if(f[t % 10] == 1 ) {
ant = 1;
break;
}
f[t % 10] = 1;
t = t / 10;
}
t1 = i * b / a;
t2 = i * c / a;
if( t1 >= 123 && t1 <= 987 && t2 >= 123 && t2 <= 987 ) {
t3 = t1;
t4 = t2;
while(ant == 0 && t3 != 0) {
if(f[t3 % 10] == 1 ) {
ant = 1;
break;
}
f[t3 % 10] = 1;
t3 = t3 / 10;
}
while(ant == 0 && t4 != 0) {
if(f[t4 % 10 ]== 1 ) {
ant = 1;
break;
}
f[t4 % 10] = 1;
t4 = t4 / 10;
}
if(ant == 0) {
cnt++;
cout<<i<<" "<<t1<<" "<<t2<<endl;
}
}
}
if(cnt == 0) {
cout<<"No!!!"<<endl;
}
return 0;
}