主题:[讨论]这道题目请大家帮我想想算法(不是源代码!)
bigchen
[专家分:1940] 发布于 2007-03-18 16:15:00
2、波浪数(work2.pas)
波浪数是在一对数字之间交替转换的数,如1212121,双重波浪数则是指在两种进制下都是波浪数的数,如十进制数191919是一个十进制下的波浪数,它对应的十一进制数121212也是一个波浪数,所以十进制数191919是一个双重波浪数。
类似的可以定义三重波浪数,三重波浪数在三种不同的进制中都是波浪数,甚至还有四重波浪数,如十进制300=606(七进制)=363(九进制)=454(八进制)=1A1(十三进制)…,你的任务就是在指定范围内找出双重、三重、四重波浪数。
输入:
一行,包含五个用空格隔开的十进制整数,前两个数表示进制的范围(2~32),第三与第四个数表示指定的范围(1~10000000),第五个数为2,3,4中的一个,表示要找的波浪数的重数。
输出:
从小到大,以十进制形式输出指定范围内的指定重数的波浪数,一行输出一个数。
样例输入:
10 11 190000 960000 2
样例输出:
191919
383838
575757
767676
959595
回复列表 (共12个回复)
沙发
bigchen [专家分:1940] 发布于 2007-03-18 16:19:00
请各位牛人帮我想想算法
只提供好一点的算法就可以了
我自己想了模拟法
但从1循环到10000000就一定超时
就不谈进行操作了
超时100%
板凳
风之落叶 [专家分:40] 发布于 2007-03-18 19:19:00
先看它是不是十进制波浪数,在将它转换成九进制,八进制,七进制·····二进制
的波浪数,依次类推。
ps:我是个新手,想法也许不成熟,望大家指出!
3 楼
bigchen [专家分:1940] 发布于 2007-03-18 21:06:00
我也是这样想的
不过超时是肯定的
所以我才发帖子向大家求助好算法啊!
4 楼
贺天行宝 [专家分:2300] 发布于 2007-03-23 17:41:00
构造法
把每个进制的所有破浪数构造出,比如一进制只有1111,二进制有1212,1111,2222
我们看到1111重复了两次,所以输出1111
注意1111,2222不是枚举出来的,是直接造出的。
实现:用比较大的boolean数组存下每个数的出现次数,最后在看有没有合法的。
大家看有没有问题??
5 楼
angwuy [专家分:2280] 发布于 2007-03-24 08:37:00
楼上的真厉害,还有一进制,二进制中竟然还出现了2
6 楼
bigchen [专家分:1940] 发布于 2007-03-24 10:40:00
算法本身是可行的
不过这些细节似乎就不用提出来了
学编程的应该都知道进制的问题
7 楼
编程黑客 [专家分:1660] 发布于 2007-03-25 15:42:00
CXY,我问了QQ上的人,他说可以只搜索前两位,然后整个数不就可以产生了吗
可是具体的操作我还是没能实现
还有,大家看看,1 12 123123123算不算是波浪数啊
8 楼
wliwei [专家分:20] 发布于 2007-03-25 16:26:00
我也不会.
第一题怎么编??
1、N进制乘法口诀表(work1.pas)
键盘输入一个自然数N(2≤N≤16),打印出N进制乘法口诀表。请注意格式,以下是N=16时的运
行结果:
* 0 1 2 3 4 5 6 7 8 9 A B C D E F
0 0
1 0 1
2 0 2 4
3 0 3 6 9
4 0 4 8 C 10
5 0 5 A F 14 19
6 0 6 C 12 18 1E 24
7 0 7 E 15 1C 23 2A 31
8 0 8 10 18 20 28 30 38 40
9 0 9 12 1B 24 2D 36 3F 48 51
A 0 A 14 1E 28 32 3C 46 50 5A 64
B 0 B 16 21 2C 37 42 4D 58 63 6E 79
C 0 C 18 24 30 3C 48 54 60 6C 78 84 90
D 0 D 1A 27 34 41 4E 5B 68 75 82 8F 9C A9
E 0 E 1C 2A 38 46 54 62 70 7E 8C 9A A8 B6 C4
F 0 F 1E 2D 3C 4B 5A 69 78 87 96 A5 B4 C3 D2 E1
9 楼
wliwei [专家分:20] 发布于 2007-03-25 16:26:00
1不是波浪数
10 楼
编程黑客 [专家分:1660] 发布于 2007-03-26 22:26:00
告诉大家,LHC在JS论坛上已经说了:1不算,12算
我来回复