如题,从1到9中取任意n个数,列出所有可能的组合情况。这个程序,并不好写。但是,有了下面的数学模型,事情简化多了。
先看取三个数进行组合的情况
从1到9中任取三个数进行组合,其数列如下:
123, 124, 125…129, 134, 135…139, … …
分析数列发现,这不就是从123开始,每一个后续是前一个加一的结果吗?
只不过这个加一运算与我们普通的加一运算略有不同,区别在两点:
逢几进位机制不同
考虑‘189’的后续,与普通加法不同,不是190,而是234。下面仔细论述:
- 9+1,大于9了,要进位,这个与普通加法一样。
- 进位后,8+1,大于8了,就得进位,这个与普通加法不同。
仔细观察后发现,每次进位值与数据位置有关,个位逢9进位,十位逢8进位,百位逢7进位。
如果从个位给每一位倒着从0编号,那进位值公式为:
进位值=9-位置编号
进位后,本位归零机制不同
进位问题解决了,再看归零机制。
考虑‘129’的后续,不是‘130’,是‘134’。也就是说,进位后,本位不是归零,而是前一位加一。
以上规律可以应用到任意n个数字的组合情况
例如:2389的后续是2456,2789的后续是3456等等。
找到数学模型,再编程序,是不是简单了很多啊?欢迎大家讨论。