将 1,2,…,9 共 9 个数分成三组,分别组成三个三位数,且使这三个三位数的比例是 9:3:6,试求出所有满足条件的三个三位数。

力扣三连击---c/c++解法

题目:将 1,2,…,9 共 9 个数分成三组,分别组成三个三位数,且使这三个三位数的比例是 9:3:6,试求出所有满足条件的三个三位数。

解法一:(个人觉得是很实用,运用的盒子来解决)

#include<stdio.h>
int main() {
	int a, b, c;
	int ge, shi, bai;
	for (a = 123; a <= 333; a++) {
		int flag = 1;
		//引用盒子,判断每个数据的使用情况,这里第一位0赋值为0, 因为数据从零开始!!! 
		int w[10] = {0, 1, 1, 1, 1, 1, 1, 1, 1, 1};
		ge = a % 10;
		shi = a / 10 % 10;
		bai = a / 100;
		if (ge != shi && shi != bai && bai != ge)
			flag++;
		if (w[ge]*w[shi]*w[bai] != 0)
			flag++;
		w[ge] = 0, w[shi] = 0, w[bai] = 0;
		b = 2 * a;
		ge = b % 10;
		shi = b / 10 % 10;
		bai = b / 100;
		if (ge != shi && shi != bai && bai != ge)
			flag++;
		if (w[ge]*w[shi]*w[bai] != 0)
			flag++;
		w[ge] = 0, w[shi] = 0, w[bai] = 0;
		c = 3 * a;
		ge = c % 10;
		shi = c / 10 % 10;
		bai = c / 100;
		if (ge != shi && shi != bai && bai != ge)
			flag++;
		if (w[ge]*w[shi]*w[bai] != 0)
			flag++;
		w[ge] = 0, w[shi] = 0, w[bai] = 0;
		//7种条件全部满足 输出即可!!! 
		if (flag == 7) printf("%d %d %d\n", c, a, b);
    
	}
	return 0;

}

//576 192 384
//657 219 438
//819 273 546
//981 327 654

解法二:

/*
1、按照a:b:c=1:2:3的比例穷举所有数
2、将a,b,c的百位、十位、个位分别拆分储存到整形数组s[9]中;
3、判断数组s[9]有无重复数字、是否有数字0
4、输出结果
*/
#include <stdio.h>

int main()
{
	int a, b, c;						//令三个数分别为a:b:c
	int i, j, s[9];			
	for (a = 100; a < 333; a++)			//数值不能重复
	{
		b = 2 * a, c = 3 * a;			//计算b、c的值
		s[0] = a / 100; s[1] = a % 100 / 10; s[2] = a % 10;  //分离a的百位、十位、个位。下同
		s[3] = b / 100; s[4] = b % 100 / 10; s[5] = b % 10;
		s[6] = c / 100; s[7] = c % 100 / 10; s[8] = c % 10;

		for (i = 0; i < 8; i++)			//判断是否有重复数字(前一个数字和后面所有数字比较,如第1个和第2个至9个比较)、是否有数字0
		{
			for (j = i + 1; j < 9; j++)
				if (s[i] == s[j]||s[i]==0||s[j]==0)break;	
			if (j < 9) break;
		}
		if (i == 8 && j == 9)			//无重复数字、也无0
			printf("a=%d,b=%d,c=%d\n", a, b, c);
	}
	return 0;
}

测试结果:

 

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
这道题可以有多种解法,以下是一种可能的解法: 首先,将1-9的数字按照大小分成三组,分别是{1,2,3}、{4,5,6}、{7,8,9}。 然后,我们需要将这三组数字分别组成三个三位数,使它们的比例为1:2:3。设这三个三位数依次为ABC,DEF,GHI。 根据比例的定义,我们可以列以下等式: A : D : G = 1 : 2 : 3 B : E : H = 1 : 2 : 3 C : F : I = 1 : 2 : 3 因为ABC、DEF、GHI都是三位数,所以它们的百位上的数字必须分别来自{1,4,7},十位上的数字必须来自{2,5,8},个位上的数字必须来自{3,6,9}。因此,我们可以列以下方程: A + D + G = (1+4+7) + (2+5+8) + (3+6+9) = 45 B + E + H = (1+4+7) + (2+5+8) + (3+6+9) = 45 C + F + I = (1+4+7) + (2+5+8) + (3+6+9) = 45 其中,等式两边的45代表每个三位数的百位数字之和。 接下来,我们可以将比例等式中的A、B、C、D、E、F、G、H、I用它们的百位、十位、个位数字表示来,即: 100A + 10B + C : 100D + 10E + F : 100G + 10H + I = 1 : 2 : 3 将等式两边同时乘以100,得到: 10000A + 1000B + 100C : 10000D + 1000E + 100F : 10000G + 1000H + 100I = 100 : 200 : 300 化简一下,得到: 100A + 10B + C : 100D + 10E + F : 100G + 10H + I = 1 : 2 : 3 这个比例等式和之前的等式一起,可以构成一个含有9个未知数的方程。解这个方程可以得到ABC、DEF、GHI的值。经过计算,得到一可能的解为: ABC = 174 DEF = 348 GHI = 522 可以验证,这三个数的比例确实为1:2:3。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值