洛谷P1008三连击——C++解法(配注释)

洛谷——P1008三连击

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

#include<stdio.h>
#include <iostream>
#include <iomanip>

using namespace std;
int j = 1;
//思路:引用一个求阶乘的函数、一个求三位数字的函数。由于函数无法返回三个数值,所以我们可以利用一个数组来求值(因为忘记返回数组怎么返回了hh
int jie(int a) {
	
	if (a != 0) {
		j = a * j;
		if (a == 1) {
			return j;
		}
		else
		{
			return jie(a - 1);
		}
	}
}//求阶乘
int num[3] = { 0 };
int sum = 0;
int ji = 1;
void each(int a) {
	for (int i = 0; i < 3; i++)
	{
		num[i] = a % 10;//取出每一位
		a = a / 10;
		//cout << "num[" << i << "]=" << num[i] << " ";//用于调试 测试函数功能是否正常
		sum += num[i];
		ji *= num[i];
	}
	
}//求出各位数的和,以及相乘的积
int main()
{
	const int total = jie(9);//9的阶乘
	for (int i = 123; i < 329; i++)//用1-9可以组成的最大的数是987 987/3=329,我们发现这里已经有一个重复的数字9了,所以i可以不取等于329,直接写i<329
	{
		for (int c = 1; c < 4; c++)
		{
			each(i * c);
		}//用i,2i,3i分别调用函数
		if ((sum == 45) && (ji == total)) {
			cout << i << " " << i * 2 << " " << i * 3 << endl;
		}
		sum = 0;
		ji = 1;//记得在每用完一个i后把sum和积清零
	}
}

太久没写代码…函数写得有点啰嗦了…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值