PTA B1008 数组元素循环右移问题:使用最大公约数的思想

前言

遇到新的思考方式时,首先考虑的应该是:为什么能这么想?而我为什么没想到。

关于本题

本题,能够想到的最简单方法:直接用for循环,加上数组第n位作为暂存。
但是,以学习思维方式的考量,如果能够借此理解“最大公约数的怎么用?”不失为一个好方式。

举个例子

8个数字,右移3位
比如:1 2 3 4 5 6 7 8(注意,数组标号是从0开始)
结果应是:6 7 8 1 2 3 4 5
然后看一下这种移法:
1 2 3 4 5 7 8
1 2
4 5 3 7 8
1 2 8 4 5 3 7
1 2 8 4 3 7 5
1 _ 8 4 2 3 7 5
……
不需要再考虑第6、7号位置。

想一下为什么?

如果是6 2,也就是说,从第4号位置(0号开始)往前推,会最终再回到4,所以还需要第5号;
如果7 3,那就不会,从4到1到5到2到6到3到0到4,此时二者的公约数是1

总结

总的来说,就思考量度上考虑,用这种方法显然更难。不过值得!
(尤其是从一脸懵逼到渐渐清晰明白的过程)

发布了146 篇原创文章 · 获赞 42 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/SmartLoveyu/article/details/95090045