w2 P1008 [NOIP1998 普及组] 三连击

发布时间 2023-04-11 19:03:56作者: RUI_26

 

 主要思路:构造一个judge函数,判断是否1-9都出现了。由于三位数范围为123-987,但因为要求三个数字比例为1:2:3,所以在遍历时的范围是123-987/3。遍历范围内的每一个整数x,并判断2x,3x是否满足judge函数,满足则输出这三个数,否则继续遍历。

代码如下:

#include<iostream>
using namespace std;
bool judge(int a,int b,int c){
  int num[10]={0};
  num[a%10]=1; //取a的个位
  num[(a/10)%10]=1; //取a的十位
  num[a/100]=1; //取a的百位
  num[b%10]=1; //取b的个位
  num[(b/10)%10]=1; //取b的十位
  num[b/100]=1; //取b的百位
  num[c%10]=1; //取c的个位
  num[(c/10)%10]=1; //取c的十位
  num[c/100]=1; //取c的百位
  for(int i=1;i<=9;++i){
    if(num[i]==0) return 0; //若1-9中有数字未出现,返回0
  }
  return 1;
}
int main()
{
  for(int i=123;i<=987/3;++i){
  int a=i,b=i*2,c=i*3;
  if(judge(a,b,c)) cout<<a<<" "<<b<<" "<<c<<endl; //判断是否满足judge,是则输出,否则继续遍历
  }
  return 0;
}