算法竞赛入门经典 2-6排列 C++解法

版权声明:作者:Valarjin https://blog.csdn.net/weixin_42125215/article/details/88750753

2-6 排列问题

用1,2,3,…,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3。按照“abc def ghi”的格式输出所有解,每行一个解。提示:不必太动脑筋。

#include<iostream>
using namespace std;

int main() 
{
	int a,b[9],count=1;	//count用来计数
	//123-987内取值,按比例来说第一个数 最大取到987/3=329
	for (a = 123; a <= 329; a++) {
		if (a * 2 <= 658 && a * 3 <= 987) {
			int a1 = a, a2 = a * 2, a3 = a * 3;
			//把值存入数组中
			b[0] = a / 100; b[1] = a / 10 % 10; b[2] = a % 10;
			b[3] = a1 / 100; b[4] = a1 / 10 % 10; b[5] = a1 % 10;
			b[6] = a2 / 100; b[7] = a2 / 10 % 10; b[8] = a2 % 10;
			for (int j = 1; j < 9; j++) {
				int t = b[j-1];
				//排序
				if (b[j] <= t) {
					b[j - 1] = b[j];
					b[j] = t;	//得到从大到小排序的序列
				}
			}
		}
		//去重,因为已经排序,所以只需要对前后位比较即可
		for (int i = 1; 1 < 9; i++)
		{
			if (b[i - 1] == b[i])
			{
				break;
			}
		}
		//在第一个循环内输出这个数组,再到下一个循环
		count++;
		cout << a << " " << a*2 << " " << a*3 << endl;
	}
	cout << count << endl;
	system("pause");
	return 0;
}

我定义了一个count记录一下输出的总个数
思路比较渣,不知道有没有其他好的办法解决
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42125215/article/details/88750753