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;
    }
    
    
    

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

  • 相关阅读:
    python学习笔记-4-列表和元组
    迭代器 生成器, 可迭代对象以及应用场景
    mysql的创创建用户阶段 开启客户端登录和授权阶段
    初识mysql数据库
    拆目录
    日志编码
    数据库mysql的安装.启动和基础配置------windows版本
    协程
    线程锁 死锁现象 递归锁 信号量 条件定时器 队列 线程池
    网络线程
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/8534397.html
Copyright © 2011-2022 走看看