小米面试题目: 一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手中没牌,最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组

编程入门 行业动态 更新时间:2024-10-09 20:22:03

小米面试题目: 一副从1到n的牌,每次从牌堆顶取一张放<a href=https://www.elefans.com/category/jswz/34/1537394.html style=桌子上,再取一张放牌堆底,直到手中没牌,最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组"/>

小米面试题目: 一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手中没牌,最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组

/**题目: 一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手中没牌,*最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组**解题思路:*取一个1~n的数组,这里为了说明取n=5。按照题目中的规则变换,得到数组:[1 3 5 4 2],*将该数组下标与值互换得到[1 5 2 4 3],即为答案。解释:[1 3 5 4 2]的意义是,经过变换,*原数组中3号位置的数字现在2号槽,原数组中5号位置的数字现在3号槽... 现在已知变换后的*槽存放的是1~n,故只要将下标与值互换就可得到待求数组。*/
public class PKPai {/** 先默认初始牌堆为1-n,按规则法则。*/public int[] pkPai(int n) {// 定义一个数组,给牌赋值int[] m = new int[n];for (int i = 0; i < m.length; i++) {m[i] = i + 1;}int[] j = new int[n];// 桌子上牌的数组int count = 0;while (count < n) {// 一直抽牌,第一张放桌子上,第二张放牌低,循环操作for (int i = 0; i < m.length; i++) {if (i % 2 == 0) {j[count] = m[i];count++;}// 扩容数组:每在牌低加一张便算作数组扩容+1if (i % 2 == 1) {int l = m[i];m = Arrays.copyOf(m, m.length + 1);m[m.length - 1] = l;}}// 反转序列// Collections.reverse(list);}return j;}// 传入默认1-n牌堆发牌的数组,交换坐标的到需要得到的序列public int[] pai(int[] j) {int length = j.length;// 定义接收新排序的数组int[] r = new int[length];int count = 0;// 置换排序for (int i = length; i > 0; i--) {r[j[count] - 1] = i;count++;}return r;}public static void main(String[] args) {PKPai pkPai = new PKPai();int[] p = pkPai.pkPai(9);int[] pai = pkPai.pai(p);for (int i = 0; i < pai.length; i++) {System.out.print(pai[i] + " ");}}
}

 

更多推荐

小米面试题目: 一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手中没牌,最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组

本文发布于:2024-02-14 08:44:59,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1762559.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:桌子上   是从   数组   小米   顺序

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!