一.
#include <iostream>
using namespace std;
int num[9]={0};
//设置数组
int main(void){
int y,z;
for(int x=123;x*3<=987;x++)
{
for (int i=0;i<9;i++)
{
num[i]=0;
}
//数组初始化
num[x/100-1]++;
num[x/10%10-1]++;
num[x%10-1]++;
//取x的各个位数字,放入数组统计次数
y=x*2;
num[y/100-1]++;
num[y/10%10-1]++;
num[y%10-1]++;
//取y的各个位数字,放入数组统计次数
z=x*3;
num[z/100-1]++;
num[z/10%10-1]++;
num[z%10-1]++;
//取z的各个位数字,放入数组统计次数
for (int w=0;w<9;w++)
{
if(num[w]!=1)
{
break;
}
//次数不为1,不符合题意,跳过
if (w == 8)
{
cout<<x<<" "<<y<<" "<<z<<endl;
}
//数组检索完毕,输出
}
}
return 0;
}
二.
#include<iostream>
using namespace std;
int main()
{ int i,j,k,q,w,e,r,t,y,u,p,o,a[9],m,n,v=0;
for(i=1;i<=3;i++) //百位不可能大于4,否则乘三大于999
for(j=1;j<=9;j++) //0不符合从1开始
for(k=1;k<=9;k++) //同上
{q=i*100+j*10+k; //第一个数
w=q*2; //第二个
e=q*3; //第三个
r=w/100; //第二个数百位
t=(w%100)/10; //十位
y=w%10; //个位
u=e/100; //第三个数百位
p=(e%100)/10; //十位
o=e%10; //个位
a[0]=i; //储存第一二三个数的百十个位数
a[1]=j;
a[2]=k;
a[3]=r;
a[4]=t;
a[5]=y;
a[6]=u;
a[7]=o;
a[8]=p;
v=0;
for(m=0;m<=8;m++) //一个数一个数比较,若有相同v=1
for(n=m+1;n<=8;n++)
{if(a[m]==a[n])
v=1;
}
if(v!=1&&e<=999&&t!=0&&y!=0&&o!=0&&p!=0) //如果没有相同的就输出
cout<<q<<" "<<w<<" "<<e<<endl;
}
return 0;
}
三.
#include<stdio.h>
#include<string.h>
int a[10];
int main(){
for (int x=123;x<=329;x++){ //枚举
int i=x,j=x*2,k=x*3;
int o=i,p=j,q=k;
int flag=0; //清零
memset(a,0,sizeof(a));
while(i>0){ //取数
a[i%10]++;
i/=10;
}
if(flag==1) continue;
while(j>0){
a[j%10]++;
j/=10;
}
while(k>0){
a[k%10]++;
k/=10;
}
for (int w=1;w<=9;w++){ //判断
if(a[w]!=1) flag=1;
}
if(flag==0) printf("%d %d %d\n",o,p,q); //输出
}
return 0;
}