习题2-6排列(permutation)
Posted miaoshengyou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了习题2-6排列(permutation)相关的知识,希望对你有一定的参考价值。
目的:用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 ", 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)的主要内容,如果未能解决你的问题,请参考以下文章