排列(一)(permutation)

排列(一)(permutation)

用1,2,3,4,5,6,7,8,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi = 1:2:3。按照”abc def ghi”的格式输出所有解,每行一个解。提示:不必太动脑筋。

思路:定义一个数组a[10],先将数组全部赋0值,此处从123开始循环到329(三位数最大的是999,而999除以3是333,又因为33重复,所以最大到329),将a[出现的数字]改为1,最后将数组的值相加,若合为9,则1—9全部出现,若有重复数字则数组之和就不为9。

C语言:

此处C语言代码引自http://blog.csdn.net/ramay7/article/details/50070799

#include <stdio.h>  
#include <string.h>  
int main()  
{  
    int x,y,z,a[10],i,s;  
    memset(a,0,sizeof(a));  
    for(x=123;x<329;x++){  
        y=2*x;  
        z=3*x;  
        //令a[出现的数字]=1
        a[x/100]=a[x/10%10]=a[x%10]=1;  
        a[y/100]=a[y/10%10]=a[y%10]=1;  
        a[z/100]=a[z/10%10]=a[z%10]=1;  
        s=0;  
        for(i=1;i<10;i++)  
            s+=a[i];  
        if(s==9)  
            printf("%d\t%d\t%d\n",x,y,z);  
       memset(a,0,sizeof(a));  //重新赋值为0  
    }  
    return 0;  
} 

Java:

public class Code {
     public static void main(String[] args) {  
         int x,y,z,s;
         int[] a ;
         a = new int[10];
         for(int i=1;i<10;i++){
             a[i] = 0;
         }
         for(x = 123; x<=329 ; x++){
             y = x*2;
             z = x*3;
             a[x/100] = a[x%100/10] = a[x%10] = 1;
             a[y/100] = a[y%100/10] = a[y%10] = 1;
             a[z/100] = a[z%100/10] = a[z%10] = 1;
             s=0;
             for(int i=1;i<10;i++)  
                    s+=a[i];  
             if(s==9)  
                 System.out.println(x+" "+y+" "+z);
             for(int i=1;i<10;i++)   //重新赋值为0  
                    a[i]=0;  
         }
    }
}

我看还有其他博主用next_permutation() 和 prev_permutation() ,这两个排列组合函数书写详情请见:http://blog.csdn.net/liveway6/article/details/51896950

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值