【题解】三连击

发布时间 2023-09-09 21:40:35作者: 红发史蒂夫

[NOIP1998 普及组] 三连击

思路

想一想

得到三个数之后把每一位依次存入桶

然后遍历这个桶,看哪一位为\(0\)

代码

// 语言:C++
#include <iostream>
#include <cstring> //memset
using namespace std;

int main()
{
	for(int i=123;i<=987/3;i++)
	{
		int a=i,b=2*i,c=3*i;
		int cnt[10];
		memset(cnt,0,sizeof(cnt)); //清零数组
		cnt[a%10]++; //取个位
		cnt[a/10%10]++; //取十位
		cnt[a/100]++; //取百位
		cnt[b%10]++; //取个位
		cnt[b/10%10]++; //取十位
		cnt[b/100]++; //取百位
		cnt[c%10]++; //取个位
		cnt[c/10%10]++; //取十位
		cnt[c/100]++; //取百位
		bool flag=true;
		for(int i=1;i<=9;i++) //看哪个数字没有用上
			if(cnt[i]==0) flag=false;
		//输出
		if(flag==true) cout<<a<<" "<<b<<" "<<c<<" "<<endl;
	}
	return 0;
}