zoukankan      html  css  js  c++  java
  • 排列(permutation) 用1,2,3,…,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要 求abc:def:ghi=1:2:3。按照“abc def ghi”的格式输出所有解,每行一个解。

    #include <stdio.h>
    #include <math.h>
    // 算法竞赛的目标是编程对任意输入均得到正确的结果。
    // 请先独立完成,如果有困难可以翻阅本书代码仓库中的答案,但一定要再次独立完成。
    // “抓住主要矛盾”——始终把学习、实验的焦点集中在最有趣的部分。如果直观地解决方案行得通,就不必追究其背后的原理。
    
    /**
    【题目】排列(permutation)
    用1,2,3,…,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要
    求abc:def:ghi=1:2:3。按照“abc  def  ghi”的格式输出所有解,每行一个解。
    
    */
    
    
    /**
    【分析】思考了半天没有思路,太难了。
    */
    
    int main()
    {
        int abc,def,ghi;
        int a[10],count=0;
    
        memset(a,0,sizeof(a)); // 将a数组中的值全部设置为0
    
        for (abc = 123;abc < 333;abc ++) { // 基本可以确定abc的最小值和最大值
            def = 2 * abc;
            ghi = 3 * abc;
    
            // 设置数组中所有对应的9位数字位置的值1
            a[abc/100] = 1; // a
            a[abc/10%10] = 1; // b
            a[abc%10] = 1; // c
    
            a[def/100] = 1; // d
            a[def/10%10] = 1; // e
            a[def%10] = 1; // f
    
            a[ghi/100] = 1; // g
            a[ghi/10%10] = 1; // h
            a[ghi%10] = 1; // i
    
            int i;
            for (i=1;i<=9;i++) {
                count += a[i];
            }
    
            if (count == 9) {
                printf("%d %d %d
    ",abc,def,ghi);
            }
    
            // 重置count 和a数组
            count = 0;
            memset(a,0,sizeof(a));
        }
    
        return 0;
    }
    
    
    

    点评:这种整体的思路,以及缩小数字范围的思路很牛逼。

  • 相关阅读:
    Java.io.outputstream.PrintStream:打印流
    Codeforces 732F. Tourist Reform (Tarjan缩点)
    退役了
    POJ 3281 Dining (最大流)
    Light oj 1233
    Light oj 1125
    HDU 5521 Meeting (最短路)
    Light oj 1095
    Light oj 1044
    HDU 3549 Flow Problem (dinic模版 && isap模版)
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/8534397.html
Copyright © 2011-2022 走看看