题目一:用0,1,2,3,4,5,6,7,8,,9十个数字组成三个三位数,(每个数字不可重复,只能用一次),第二个数是第一个数的两倍,第三个数是第一个数的三倍。
分析:因为0的特殊性,所以这9个数字中必然没有0; 最小的数字大小在123——329之间;
One).先找出最小的基数,再把第二个,第三个数求出,把各个位置上的数提出来在判断,直到求出正确答案。
#include<iostream>
using namespace std;
void PD(int num,bool *S) //对每一个出现过的数字进行标记
{
int m;
do{
m=num%10;
S[m]=false;
num/=10;
}while(num!=0);
}
int Find(bool *S,int n) //统计使用过的数字数
{
int temp=0;
for(int q=0;q<n;q++)
{
if(S[q]==true) temp++;
}
return temp;
}
int main()
{
int Fir,Sec,Thr;
bool *S=new bool[10];
for(int i=0;i<10;i++)
S[i]=true; //初始化标记
for(int num=123;num<=329;num++){
Fir=num;
Sec=2*num;
Thr=3*num;
PD(Fir,S);
PD(Sec,S);
PD(Thr,S);
if(Find(S,10)==1)
cout<<Fir<<ends<<Sec<<ends<<Thr<<endl;
for(int i=0;i<10;i++)
S[i]=1; //初始化
}
system("pause");
return 0;
}