码迷,mamicode.com
首页 > 其他好文 > 详细

习题2-6排列(permutation)

时间:2019-01-18 16:24:06      阅读:349      评论:0      收藏:0      [点我收藏+]

标签:UNC   i++   输出   要求   span   ++   个数   迭代   第一个   

目的:用1-9九个数字组成三个三位数abc, def, ghi,每个数字恰好使用一次,求三个数abc:def:ghi = 1 : 2 : 3的所有可能

 

要求:

  输出:按照“abc def ghi”格式输出所有解

  样例输出:192 384 576

 

思路:用数组元素是否重复判断每个数字是否恰好使用一次,将abcdefghi存入数组,如果重复就说明不是解。那么就有两种思路:第一种是由数组得到匹配比例的数字解,这样就要构造循环对数组的每个位进行判断;第二种是不断对第一个数进行迭代,由比例关系得到第二个和第三个数,最后判断数字是否重复,采用了这种方法。

 

代码如下:

#include<stdio.h>

int bitSize;

int main()
{
    //Function declaration
    int inBit(int *bit, int num);

    //Local variables
    int bit[9];

    for(int i = 123; i < 333; i++){
        bit[0] = i / 100;
        bit[1] = (i / 10) % 10;
        bit[2] = i % 10;

        int status = 1;
        bitSize = 3;

        int j = 2 * i;
        int k = 3 * i;

        int temp[6];
        temp[0] = j / 100;
        temp[1] = (j / 10) % 10;
        temp[2] = j % 10;
        temp[3] = k / 100;
        temp[4] = (k / 10) % 10;
        temp[5] = k % 10;

        for(int iter = 0; iter < 6; iter++){
            if(inBit(bit, temp[iter])){//If repeated
                status = 0;
                break;
            }
            else{
                bit[bitSize++] = temp[iter];
            }
        }

        if(status){
            printf("%d %d %d\n", i, j, k);
        }
    }

    return 0;
}

int inBit(int *bit, int num){//If repeated,return 1
    for(int i = 0; i < bitSize; i++){
        if(num == bit[i]){
            return 1;
        }
    }
    return 0;
}

优化:在找到对应的三个数之后循环判断是否数字重复的过程中,只要有一个重复即不是解,可以进行下一次猜数。

习题2-6排列(permutation)

标签:UNC   i++   输出   要求   span   ++   个数   迭代   第一个   

原文地址:https://www.cnblogs.com/miaoshengyou/p/10287914.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!