您的位置:首页 > 其它

1~9的9个数组成9位数并前n为能被n整除

2014-03-08 22:56 981 查看
题目:来自程序员面试宝典

请将123456789九个数字以特定的顺序排列,组成一个9位数ABCDEFGHI(每个数字只能使用一次),使得:

1.第一位数字组成的整数可以被1整除

2.第一、二位数字组成的整数可以被2整除

3.第一、二、三位数字组成的整数可以被3整除

4.第一、二、三、四位数字组成的整数可以被4整除

......

分析:

E=5(被5整除),则ABCD5FGHI

偶数位一定是偶数则BDFH={2,4,6,8},奇数位一定是奇数则ACGI={1,3,7,9};

ABCD被4整除,则(10C+D)被4整除,排除D={4,8}的情况后,D={2,6};同样,ABCD5FGH被8整除,则(10G+H)能被4整除,H={2,6};故DH={2,6},BF={4,8};

ABCD5F被6整除,ABC被3整除,则(100D+50+F)能被3整除,结合D={2,6},F={4,8},可得DEF={258,654};

当DEF=258时,H=6,B=4,则A4C258G6I.

由被8整除得8G6被8整除,结合G={1,3,7,9}得,G={1,9}

当G=1时,AC={3,7,9},无法使A4C被3整除。

当G=9时,AC={1,3,7};147、741、143、341能使A4C被3整除,但前7位都不能被7整除。

DEF=258被否决,故:

DEF必然等于654,H=2,B=8,则A8C654G2I.

由被8整除得4G2被8整除,结合G={1,3,7,9}得,G={3,7}

当G=3时,AC={1,7,9};189、981、789、987能使A8C被3整除,但前7位都不能被7整除。

当G=7时,AC={1,3,9};183、381、189、981能使A8C被3整除,唯有381能被7整除,故得唯一解381654729

程序1:

#include<stdio.h>
#include<vector>
using namespace std;

bool use[10];
vector <long> v;
void dfs(int k, long a)
{
if(k && a%k!= 0 )
return;
if(k == 9)
{
v.push_back(a);
return;
}
for(int i=1;i <= 9;i++)
{
if( !use[i])
{
use[i]=1;
dfs(k+1,a*10+i);
use[i]=0;
}
}
}
int main()
{
dfs(0,0);
for(int i=0;i<v.size();i++)
printf("%ld ",v[i]);
printf("\n");
return 0;
}


程序2:--转自网络

#include <iostream>
using namespace std;
void main()
{
int a[9];
int j, num;
a[4] = 5;
cout<<"所求的九位数为:"<<endl;
for (a[0] = 1; a[0] < 10; a[0] += 2)
{
for (a[1] = 2; a[1] < 9; a[1] += 2)
{
for (a[2] = 1; a[2] < 10; a[2] += 2)
{
if (a[2] == a[0])
continue;
for (a[3] = 2; a[3] < 9; a[3] += 2)
{
if (a[3] == a[1])
continue;
for (a[5] = 2; a[5] < 9; a[5] += 2)
{
if (a[5] == a[3] || a[5] == a[1])
continue;
for (a[6] = 1; a[6] < 10; a[6] += 2)
{
if (a[6] == a[4] || a[6] == a[2] || a[6] == a[0])
continue;
for (a[7] = 2; a[7] < 9; a[7] += 2)
{
if (a[7] == a[5] || a[7] == a[3] || a[7] == a[1])
continue;
for (a[8] = 1; a[8] < 10; a[8] += 2)
{
if (a[8] == a[6] || a[8] == a[4] || a[8] == a[2] || a[8] == a[0])
continue;
num = 0;
for (j = 0; j < 9; j++)
{
num = num * 10 + a[j];
if (num % (j + 1) != 0)
break;
}
if (j == 9)
cout<<num<<endl;
}
}
}
}
}
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐