1-9组成9位数,各位不同,前n位能被n整除的算法
2016-09-01 11:43
429 查看
程序员面试宝典第五版112页答案,代码附有注释
http://m.blog.csdn.net/article/details?id=51510141
一个 9 位的整数,1-9 的数字,每个数字只能出现一次
其中前1位能被1整出
前 2 位能被 2 整除
前 3 位能被 3 整除
前 4 位能被 4 整除
依次类推.........
前 9 位能被 9 整除
这似乎是小时候的一道奥数题,有唯一解。刚刚看了有点蒙,如果不用程序语言,用纸笔在自己脑子里分析即可得出答案。后来大概思考了一下,应该可以用递归实现,即是从第1位开始判断是否可以被1整出,然后判断第2位是否可以被2整除,直到第9位终止。就是个遍历,效率不高。
程序员面试宝典第五版112页答案,代码附有注释
http://m.blog.csdn.net/article/details?id=51510141
一个 9 位的整数,1-9 的数字,每个数字只能出现一次
其中前1位能被1整出
前 2 位能被 2 整除
前 3 位能被 3 整除
前 4 位能被 4 整除
依次类推.........
前 9 位能被 9 整除
这似乎是小时候的一道奥数题,有唯一解。刚刚看了有点蒙,如果不用程序语言,用纸笔在自己脑子里分析即可得出答案。后来大概思考了一下,应该可以用递归实现,即是从第1位开始判断是否可以被1整出,然后判断第2位是否可以被2整除,直到第9位终止。就是个遍历,效率不高。
#include<iostream> #include<vector> using namespace std; bool check[10]; vector<int> v ; void nineBitInteger(int k,long long a) { //判断是否可以被位数(k)整除,不可则结束 if (k&&a%k != 0)return; //第9位也符合条件则将数A保存起来 if (k == 9) { v.push_back(a); return; } //递归过程 for (int i = 1; i <= 9; i++) { if (!check[i]) { //1-9这九个数,其中检测过则赋值为1 check[i] = 1; nineBitInteger(k + 1, a * 10 + i); check[i] = 0; } } } void main() { nineBitInteger(0, 0); for (int i = 0; i < v.size();i++) { cout << v[i]; } cout << endl; }
相关文章推荐
- 1~9组成9位数前i位能被i整除
- 一个十位数由0-9数字组成并前N位被N整除
- 0~9十个数,每个数只能使用一次,组成两个三位数相加和为四位数的算法
- 用123456789这九个数字组成三个三位数,每个数字都不同。使的abc:def:hij = 1:2:3,求这三个数
- 1-9 的数字,每个数字只能出现一次组成9位整数,其中第1位能被1整除 前 2 位能被 2 整除 前 3 位能被 3 整除 依次类推......... 前 9 位能被 9 整除
- 编写一个由1-9组成的9位数,并且数字不重复,前N项能被N整除
- 对一个5位数的任意整数,求出其降序数。例如,整数是82319,则其降序数是98321。算法提示:将整数的各位数分解到一维整型数组a中,再将a数组中的元素按降序排序,最后输出a数组元素值。
- 用C语言数组求4个不同的数字能组成多少个不同的4位数
- 一个九位数由1-9数字组成并前N 位被N整除
- 一个九位数由1-9数字组成并前N 位被N整除
- 输入一个四位整数,分别输出组成该四位数的各位数字
- 给你一个由n-1个整数组成的未排序的序列,其元素都是1到n中的不同的整数。请写出一个寻找序列中缺失整数的线性时间算法。
- 算法竞赛入门经典2-10 用1,2,3,4,5,6,7,8,9组成3个三位数 abc:def:ghi=1:2:3
- 求几个相同数字组成不同位数数字的和:s=a+aa+aaa+aaaa+aa…a的值
- 由1-9这九个数字组成一个九位数(不能重复),前N位数能被N整除
- 排序组合方法,选出3个数,组成不同的三位数,要求每个三位数不相等
- (算法)多少个1组成的整数可以被2011整除?
- ProjectRuler 算法练习之 位数组成字符串相同的整数
- ProjectRuler 算法练习之 位数组成字符串同样的整数
- 有4个数,组成不同的3位数,每个数各个位数字不同,求这些数的个数