请将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