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:
程序2:--转自网络
请将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; } } } } } } } } }
相关文章推荐
- 1~9组成9位数前i位能被i整除
- 由1-9这九个数字组成一个九位数(不能重复),前N位数能被N整除
- 用1~9的9个数字组成三个三位数,成1:2:3的比例
- 用1,2,3,4,5,6,7,8,9这9个数字组成一个九位数。
- 一个十位数由0-9数字组成并前N位被N整除
- 编写一个由1-9组成的9位数,并且数字不重复,前N项能被N整除
- 一个九位数由1-9数字组成并前N 位被N整除
- 用C++将1,2...9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:3的比例
- 一个九位数由1-9数字组成并前N 位被N整除
- 由1到9的9个数组成3个3位数,且三个数成1:2:3的比例,试求出所有的组合
- 一个九位数由1-9数字组成并前N 位被N整除
- 1-9组成9位数,各位不同,前n位能被n整除的算法
- 有4个数,组成不同的3位数,每个数各个位数字不同,求这些数的个数
- 整数问题 --如果一个数能够被组成它的各个非0数字整除,则称它是完美数。
- 用1-9组成三个三位数abc,def,ghi,每个数字只能使用一次,并且要求abc:def:ghi=1:2:3
- a,b,c都为三位数,由1-9组成,b=2a,c=3a
- 产生n位数序列如果不够n位的数字前边用0补齐,通过 bash而且不用循环,直接产生n个相同的字符组成的字符串
- 用1,2,3……,9组成3个三位数,比例为1:2:3,且每个数只能用一次。
- 用1,2,3…9组成3个三位数abc, def, ghi, 每个数字恰好使用一次,且abc:def:ghi=1:2:3,输出所有解。 用1,2,3…9组成3个三位数abc, def, ghi, 每个数
- 一连串1组成的数被n整除问题