[C++] 排列

[C++] 排列

题目

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

分析

刚开始学C++,看网上的不太懂,于是自己用一种笨方法实现了。
首先是三位数限制,那么第一个数一定在111和333之间,for循环判断。只要生成第一个数,那么第二个,第三个随之确定,那么再判断第二个和第三个数是否满足条件即可,有些麻烦。
创建一个全为0的数组,如果使用过,将相对的置1,后面判断就根据这个数组判断1-9哪些使用过。不合格清零。

代码实现

#include <iostream>
using namespace std;

bool ifNotZero(int x,int arr[10]){
    bool b = false;
    if(arr[x] == 1)
        b = true;
    return b;
}
int main()
{
    int n1,n2,n3,n21,n22,n23,n31,n32,n33;
    int arr[10]={0,0,0,0,0,0,0,0,0,0};
    for(int a = 1; a <= 3; a++)
    {
        arr[a] = 1;
        for(int b = 1; b <= 9; b++)
        {
            if(ifNotZero(b, arr)) continue;
            arr[b] = 1;
            for(int c = 1; c <= 9; c++)
            {
                if(ifNotZero(c, arr)) continue;
                arr[c] = 1;
                n1 = a * 100 + b * 10 + c;

                //第二个数字检测
                n2 = n1 * 2;
                n21 = n2 / 100;
                n22 = (n2 % 100) / 10;
                n23 = n2 % 10;
                if(ifNotZero(n21, arr)){
                    arr[c] = 0;
                    continue;
                }
                arr[n21] = 1;
                if(ifNotZero(n22, arr)){
                    arr[c] = 0;
                    arr[n21] = 0;
                    continue;
                }
                arr[n22] = 1;
                if(ifNotZero(n23, arr)){
                    arr[c] = 0;
                    arr[n21] = 0;
                    arr[n22] = 0;
                    continue;
                }
                arr[n23] = 1;

                //第三个数字检测
                n3 = n1 * 3;
                n31 = n3 / 100;
                n32 = (n3 % 100) / 10;
                n33 = n3 % 10;
                if(ifNotZero(n31, arr)){
                    arr[c] = 0;
                    arr[n21] = 0;
                    arr[n22] = 0;
                    arr[n23] = 0;
                    continue;
                }
                arr[n31] = 1;
                if(ifNotZero(n32, arr)){
                    arr[c] = 0;
                    arr[n21] = 0;
                    arr[n22] = 0;
                    arr[n23] = 0;
                    arr[n31] = 0;
                    continue;
                }
                arr[n32] = 1;
                if(ifNotZero(n33, arr)){
                    arr[c] = 0;
                    arr[n21] = 0;
                    arr[n22] = 0;
                    arr[n23] = 0;
                    arr[n31] = 0;
                    arr[n32] = 0;
                    continue;
                }
                cout<<"\""<<n1<<" "<<n2<<" "<<n3<<"\""<<endl;
                arr[c] = 0;
                arr[n21] = 0;
                arr[n22] = 0;
                arr[n23] = 0;
                arr[n31] = 0;
                arr[n32] = 0;
                arr[n33] = 0;
            }
            arr[b] = 0;
        }
    }
    return 0;
}
发布了19 篇原创文章 · 获赞 11 · 访问量 2422

猜你喜欢

转载自blog.csdn.net/Cedric_6/article/details/104110212