首页 > 其他分享 >P1008 [NOIP1998 普及组] 三连击

P1008 [NOIP1998 普及组] 三连击

时间:2022-08-14 07:44:16浏览次数:54  
标签:10 连击 P1008 bj flag ij NOIP1998 ijj 100

试题分析:将 1到9九个数分成 3 组,分别组成 3 个三位数,且使这 3个三位数构成 1:2:3的比例,数值较小,所以暴力枚举

算法分析:因为4*3=12,超过了10,所以百位的数最多为3,因为1到9每个数都要出现,所以不超过1000,且要判断是否全部出现,可以通过从第一个数高位往下依次乘应乘的倍数,过10便分离高位加1,最后判断是否有重复的

#include<bits/stdc++.h>
using namespace std;
int main(){
int n,i,j,m,a,b,c,d[11],ij,bj,ijj,flag;
for(i=1;i<=3;i++){
for(j=1;j<=9;j++){
if(i!=j){
for(m=1;m<=9;m++){
if(i!=m&&j!=m&&(i*100+j*10+m)*3<1000){
a=i*100+j*10+m;
b=(i*100+j*10+m)*2;
c=(i*100+j*10+m)*3;
d[1]=m;
d[2]=i;
d[3]=j;
bj=4;
for(ij=2;ij<=3;ij++){
d[bj]=ij*i;
bj++;
d[bj]=ij*j;
if(ij*j>10){
d[bj-1]=d[bj-1]+d[bj]/10;
d[bj]=d[bj]%10;
}
bj++;
d[bj]=ij*m;
if(ij*m>10){
d[bj-1]=d[bj-1]+d[bj]/10;
d[bj]=d[bj]%10;
}
bj++;
}
flag=0;
for(ij=1;ij<=8;ij++){
for(ijj=ij+1;ijj<=9;ijj++){
if(d[ij]==d[ijj]){
flag=1;
break;
}
}
if(flag==1){
break;
}
}
if(flag==0){
cout<<a<<" "<<b<<" "<<c<<endl;
}
}
}
}
}
}
return 0;
}

标签:10,连击,P1008,bj,flag,ij,NOIP1998,ijj,100
From: https://www.cnblogs.com/wangjunlong9948/p/16584744.html

相关文章

  • [NOIP1998 普及组] 三连击
    试题分析:题目要求三个三位数是由1~9中分成三组组成的,也就是说三个数中每个位数上的数字都不相同,然后三个三位数要符合1:2:3的比例关系,所以我们可以直接将i看做第1个三位数,剩......