枚举(2)


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;
}

运行结果如下:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值