• 排列(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;
    }
    
    
    

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

  • 相关阅读:
    26 Oracle数据库——分页
    25 PLSQL图形化操作
    24 数据库练习——简单练习
    23 SQL语言——视图 VIEW
    22 SQL语言——索引 index
    21 SQL语言——序列
    20 表结构的增删改
    19 Oracle外键约束
    18 SQL语言——约束
    17 SQL语言——子查询与关键字in
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/8534397.html
Copyright © 2020-2023  润新知