习题2-6 排列
用1,2,3…,9 组成3个三位数 abc,def 和 ghi,每个数字恰好使用一次,要求 abc:def:ghi=1:2:3。按照“abc def ghi”的格式输出所有解,每行一个解。
提示:不必太动脑筋。
稍加思索, 可以想到数abc的大概范围123~333。 之后for循环, 将abc、2abc、3abc各分解成3个数字后 (如果碰到0直接return) 存入set集合(和数学中的集合一样, 只记录存入了什么, 不记录重复存入次数)。
如果set集合的大小为9, 说明分解后的数字都各不相同, 输出; 反之, 则存在相同数字, 不输出。
下面是代码:
#include<bits/stdc++.h>//万能头
using namespace std;
void fj(int x,set<int>&s);//函数声明
int main(){
for(int x=123;x<=333;x++)
{
set<int>s;
fj(x,s);fj(2*x,s);fj(3*x,s);//分解
if(s.size()==9)//判断 set函数,返回集合元素个数
printf("%d\n",x);
}
return 0;
}
void fj(int x,set<int>&s)
{
while(x)//当x不为0时,循环,存入x每一位的数字到set中
{
if(x%10==0) return ;
s.insert(x%10);//set函数,存入元素
x/=10;
}
}