2.
1-9随意拿三个数字,组成三个三位数x,y,z,使x:y:z=1:2:3。问有多少种组合,列举出来(9个数字不能重复使用)
分析:1,x的取值范围在123-333之间;
2.设置数组来限定这三个9个数字不能重复
注意:
1.数组每次检验时都应重新赋初值0;
2.计数器每次要恢复为0;
#include<iostream>
using namespace std;
int main()
{
int x,y,z,j,i,q;
int m=0,count;
for(x=123;x<333;x++)
{
count=0;
int a[10]={0};
q=x;
y=2*q;
z=3*q;
for(j=1;j<=3;j++)
{
a[q%10]++;
q=q/10;
}
for(j=1;j<=3;j++)
{
a[y%10]++;
y=y/10;
}
for(j=1;j<=3;j++)
{
a[z%10]++;
z=z/10;
}
for(i=1;i<10;i++)
{
if(a[i]==1)
count++;
}
if(count==9)
{
cout<<q<<" "<<2*q<<" "<<3*q<<endl;
m++;
}
}
cout<<"共有"<<m<<"种情况"<<endl;
return 0;
}
考虑复杂度,将程序改进如下:
#include <iostream>
using namespace std;
int main()
{
int i,j,x,y,m;
m=0;
int a[10]={0};
for(x=123;x<333;x++)
{ int a[10]={0};
int count=0;
for(i=1;i<=3;i++)
{y=i*x;
for(j=1;j<=3;j++)
{
a[y %10]++;
y =y /10;
}
}
for(i=1;i<10;i++)
{
if(a[i]==1)
count++;
}
if(count==9)
{
cout<<x<<","<<2*x<<","<<3*x<<endl;
m++;
}
}
cout<<m<<endl;
return 0;
}
运行结果如下: