一个九位数由1-9数字组成并前N 位被N整除

请将123456789九个数字以特定的顺序排列,组成一个9位数ABCDEFGHI(每个数字只能使用一次),使得:
1.第一位数字组成的整数可以被1整除
2.第一、二位数字组成的整数可以被2整除
3.第一、二、三位数字组成的整数可以被3整除
4.第一、二、三、四位数字组成的整数可以被4整除
……
9.第一、二、三…九位数字组成的整数可以被9整除

#include <stdio.h> 

void swap(int *a, int *b) 
{ 
    int m; 
    m = *a; 
    *a = *b; 
    *b = m; 
} 
bool check(int list[])
{
    int res = list[0];
    for (int i = 1 ; i < 9;i++)
    {
        res = res *10 + list[i];
        if (res % (i+1) != 0)
        {
            return false;
        }
    }
    static long result = 0;
    if (result != res)
    {
        result = res;
        printf("%d\n",res);
    }

    return true;;
}
void perm(int list[], int k, int m) 
{ 
    int i; 
    if(k == m) 
    { 
        for(i = 0; i <= m; i++) 
        {
            check(list);
        }
    } 
    else 
    { 
        for(i = k; i <= m; i++) 
        { 
            swap(&list[k], &list[i]); 
            perm(list, k + 1, m); 
            swap(&list[k], &list[i]); 
        } 
    } 
} 
void main() 
{ 
    int list[] = {1, 2, 3, 4, 5,6,7,8,9}; 
    perm(list, 0, 8); 

}

output:381654729

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值