排序 permutation

Posted bencky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序 permutation相关的知识,希望对你有一定的参考价值。

习题2-6  排序 permutation

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

 

我的思路:

既然每个数字只能出现一次,那么就将1-9这九个数字出现的情况做记录,出现了的赋值为1,没有出现的为0。

然后分别对应着abc,def,ghi的百、十、个三位。

最后进行累加,如果累加器结果为9,那么说明每个数字出现了一次,则可以输出,否则不然。

 

#include "stdio.h"
int main()
{
    for(int abc=123;abc<=333;abc++)//确定abc最小值和最大值 
    {//1-9出现的数字为1,没有出现的为0,累加起来,等于9则正确,否则错误 
        int s[10]={0};    //定义一个数组记录0~9出现的次数,并且循环前置零, 
                        //防止上一轮出现的1在这一轮没有出现,影响最后累加,导致多加 
        s[abc/100]=1;//百位 a
        s[abc/10%10]=1;//十位 b
        s[abc%10]=1;//个位 c
        
        int def=2*abc;//另def为abc的2倍
        s[def/100]=1;//百位 d
        s[def/10%10]=1;//十位 e
        s[def%10]=1;//个位 f
        
        int ghi=3*abc;//另ghi为abc的3倍
        s[ghi/100]=1;//百位 g
        s[ghi/10%10]=1;//十位 h
        s[ghi%10]=1;//个位 i
        
        int count=0;//累加器 
        for(int i=1;i<=9;i++)//实现1-9的累加计数 
            count+=s[i];
        if(count==9)//如果1-9都出现了,则输出这些组合 
            printf("%d %d %d
",abc,def,ghi); 
    }
    return 0;
} 

 

以上是关于排序 permutation的主要内容,如果未能解决你的问题,请参考以下文章

Permutation Sequence 序列排序

46. Permutations

47. Permutations II

AtCoderD - Restricted Permutation 拓扑排序模板题:拓扑排序+优先队列

leetCode 31.Next Permutation (下一个字典序排序) 解题思路和方法

1207D Number Of Permutations