ZZULIOJ:1149: 组合三位数之二

题目描述

把1,2,3,4,5,6,7,8,9,组成三个三位数(每个数只能用一次),第二个数是第一个数的2倍,第三个数是第一个数的3倍,这三个三位数各是多少?答案可能有很多组,请按第一个数的升序顺序输出每组的三个三位数。

输入

输出

输出所有满足条件的三位数组合,按第一个数的升序顺序输出。

样例输出 Copy

192 384 576
.........y

源代码 

//本题与组合三位数之一不同之处仅仅在于输出三个三位数的时候判断条件不同
//原本的三个三位数必须是完全平方数改为了
//第二个三位数是第一个三位数的二倍
//第三个三位数是第一个三位数的三倍 
#include <iostream>
using namespace std;
const int N = 1000000 + 10;
int path[N];
bool vis[N];
void dfs(int u)
{
    if(u == 9)
    {
        int ans1 = path[0] * 100 + path[1] * 10 + path[2];
        int ans2 = path[3] * 100 + path[4] * 10 + path[5];
        int ans3 = path[6] * 100 + path[7] * 10 + path[8];
        if(ans2 == ans1 * 2 && ans3 == ans1 * 3)//仅仅对于此处的条件进行修改即可 
        {
            cout << ans1 << ' ' << ans2 << ' ' << ans3 << endl;
        }
        return;
    }
    for(int i = 1;i <= 9;i ++ )
    {
        if(!vis[i])
        {
            path[u] = i;
            vis[i] = true;
            dfs(u + 1);
            vis[i] = false;
        }
    }
}
int main()
{
    dfs(0);
    return 0;   
}

猜你喜欢

转载自blog.csdn.net/couchpotatoshy/article/details/126077208