标题:怎么用1-9个随机组成三个三位数
只看楼主
liyichen
Rank: 1
等 级:新手上路
帖 子:4
专家分:4
注 册:2015-8-21
结帖率:100%
已结贴  问题点数:10 回复次数:1 
怎么用1-9个随机组成三个三位数
题目:用1、2、3…9组成三个三位数:abc、def、ghi,每个数字恰好被使用了一次,要求abc:def:ghi=1:2:3.输出所有解。

想问一下各路大神,用这九个数字随机组成3个3位数的算法,有没有简单一点的?我写的每次都是有很多循环和嵌套,运行效率非常低。
2015-08-25 10:34
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
最笨的方法:abc 最小为123,最大为329,然后一个个的试验

程序代码:
#include <stdio.h>

int main( void )
{
    for( unsigned abc=123; abc<=329; ++abc )
    {
        unsigned def = abc*2;
        unsigned ghi = abc*3;

        unsigned mark = 0;
        mark |= 1u<<(abc/1%10);
        mark |= 1u<<(abc/10%10);
        mark |= 1u<<(abc/100%10);
        mark |= 1u<<(def/1%10);
        mark |= 1u<<(def/10%10);
        mark |= 1u<<(def/100%10);
        mark |= 1u<<(ghi/1%10);
        mark |= 1u<<(ghi/10%10);
        mark |= 1u<<(ghi/100%10);

        if( mark == 0x3FE ) // binary: 1111111110
            printf( "%u:%u:%u\n", abc, def, ghi );
    }

    return 0;
}

192:384:576
219:438:657
273:546:819
327:654:981

2015-08-25 11:04



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-456732-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017953 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved