洛谷——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和积清零
}
}
太久没写代码…函数写得有点啰嗦了…