1149: 组合三位数之二
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 875 Solved: 514
Submit Status Web Board
Description
把1,2,3,4,5,6,7,8,9,组成三个三位数(每个数只能用一次),第二个数是第一个数的2倍,第三个数是第一个数的3倍,这三个三位数各是多少?答案可能有很多组,请按第一个数的升序顺序输出每组的三个三位数。
Input
无
Output
输出所有满足条件的三位数组合,按第一个数的升序顺序输出。
Sample Input
Sample Output
192 384 576219 438 657.........
HINT
Source
#include<iostream>
using namespace std;
int bai(int x) ;//求数的百位
int shi(int x) ; //十位
int ge(int x) ; //个位
int main (int argc ,char *argv[])
{
int a,b,c;
int q[10] ; //包括了0,所以10个
for ( a=123 ; a<987/3 ; a++) //第一个数a不能过大,因而最大的数除以3
{
for (int i=0;i!=10;i++)
q[i]=1; //初始化数组为1
b = 2*a;
c = 3*a;
if (bai(a)==0 || shi(a)==0 || ge(a)==0 || bai(b)==0 || shi(b)==0 || ge(b)==0 || bai(c)==0 || shi(c)==0 || ge(c)==0)
continue; //满足if则继续执行for语句
//这些个if语句调用bai(),shi(),ge()使得三个三位数是从1~9中的不重复的某三个
if ( q[ bai(a) ] ) //if(a)表示为a非0为真,则表示为q[*]=1为真,执行下一条语句。
q[ bai(a) ]=0;
else continue;
if ( q[ shi(a) ] )
q[ shi(a) ]=0;
else continue;
if ( q[ ge(a) ] )
q[ ge(a) ]=0;
else continue;
if ( q[ bai(b) ] )
q[ bai(b) ]=0;
else continue;
if ( q[ shi(b) ] )
q[ shi(b) ]=0;
else continue;
if ( q[ ge(b) ] )
q[ ge(b) ]=0;
else continue;
if ( q[ bai(c) ] )
q[ bai(c) ]=0;
else continue;
if (q[ shi(c) ] )
q[ shi(c) ]=0;
else continue;
if ( q[ ge(c) ] )
q[ ge(c) ]=0;
else continue;
cout<<a<<' '<<b<<' '<<c<<endl;
}
return 0;
}
int bai(int x)
{
return x/100;
}
int shi(int x)
{
return x/10%10;
}
int ge(int x)
{
return x%10;
}