13张扑克牌的顺序

编程入门 行业动态 更新时间:2024-10-11 21:20:39

13张<a href=https://www.elefans.com/category/jswz/34/1766301.html style=扑克牌的顺序"/>

13张扑克牌的顺序

扑克牌取出,求出原来排序

最近发现了个有趣的问题:(叙述不专业,体谅)
有13张扑克牌,里面有1 ~ k,花色不用处理,假设是同一花色。
将扑克牌以一定的顺序排列,放到一起,然后执行如下操作:
从最上面的开始,取出第一张,放到扑克牌的最后,再取出一张,亮出,亮出的是扑克牌1,不放回。
再取出一张,放到最下面,再取出一张,亮出是2。。。。
执行完之后,亮出的顺序是1 ~ k,求出原来的手中扑克牌顺序。
用代码实现。

分析

这个问题可以看作一串字符串为1 ~ k数组,往数组里面存数据;
隔一个存一个,到最后返回数组索引0继续执行。
设一个指针i;
i = 0,第1个空不存,i = 1,第2个空存,存字符串"1";
i = 2,第3个空不存,i = 3,第4个空存,存字符串"2";
以此类推;
i =11,第11个空不存,i = 12,到第12个空存字符串"6";
然后i = 13,可以取余操作,让i = i%13得到i=0。
又判断i = 0,可以存,存字符串"7";
然后i=1,不是空位,不存;i=2第一个空位,不存;i=3 ,不是空位,不存,i=4,第二个空位,存,存字符串"8";
依次执行完,可以记录存的次数,当存的次数等于传过来的数组的长度,跳出;
大概思路就是这样【本来想画图解析,太麻烦了(-- _ --)】
(建议自己分析,动手敲一下,代码是经过n次修改得来,不是直接写出的,一步一步测试,尤其是存值后最好打印一下存入之后的数组,更好的观察数组的存值变化)

import java.util.Arrays;/*** 扑克牌问题* * @author Administrator**/
public class Test02 {public static void main(String[] args) {System.out.println(Arrays.toString(getResult(13)));//测试System.out.println(Arrays.toString(getResult2(new String[] {"1","2","3","4","5","6","7","8","9","10","J","Q","K"})));}public static int[] getResult(int arr) {int[] result = new int[arr];int count = 1;int i = 0;boolean flag = false;while (true) {if (count > arr) {break;}if (result[i] == 0) {flag = true;}i++;if (i == arr) {i = i % arr;}if (result[i] == 0 && flag == true) {result[i] = count;count++;flag = false;}}return result;}public static String[] getResult2(String[] arr) {String[] result = new String[arr.length];int count = 1;int i = 0;int index = 0;boolean flag = false;while (true) {if (count > arr.length) {break;}if (result[i] == null) {flag = true;}i++;if (i == arr.length) {i = i % arr.length;}if (result[i] == null && flag == true) {result[i] = arr[index++];count++;flag = false;}}return result;}}
结果:
[7, 1, 12, 2, 8, 3, 11, 4, 9, 5, 13, 6, 10]
[7, 1, Q, 2, 8, 3, J, 4, 9, 5, K, 6, 10]
代码分析:

传过来数组arr,里面存1~k,依次取出1 ~ k存进新的等长空数组result ;
flag记录是否扫到第一个空位,默认为false,没扫到。
用变量i遍历数组;
i = 0是第一个空;第一次扫到空的时候将falg变为true;
然后i++直接进到下一个位置,保证第二次扫到的不是第一个的空位。
i = 1是第二个空位,进入if (result[i] = = null && flag = = true),存值,flag变为false,count ++;
i = 1到if (result[i] = = null)不是空位;
i = 2到if (result[i] = = null && flag = = true),不进入,到if (result[i] = = null),修改flag;
依次循环当count > arr.length跳出,count从1加到arr.length刚好存完传过来的数组值。

原创文章,转载请标明出处,谢谢!!!

更多推荐

13张扑克牌的顺序

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

发布评论

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

>www.elefans.com

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