自己在纸上画了流程图,跟着就利用java写出代码,与实际结果验证相同,故纪录下来备后续复习。
感觉流程图还是很利于理清思路。
java代码如下:
//魔术师发牌问题:单循环数组实现。 //并利用对元素赋值后,给予下表赋值true,后续不用计数。 public class magicCard
{ public magicCard() { int[] arr=new int[13]; boolean[] flag=new boolean[13]; for(int i=0;i<13;i++) { flag[i]=false; } int tmp=-1;//tmp代表下标指针 // 按照单循环给牌号依次赋值 for(int i=1;i<=13;i++) { int valid=i; while(true) { tmp++; while(tmp>=13) { tmp-=13; } if(!flag[tmp]) //是否已赋值,若未赋值则算一个有效位置 { valid--; } if(valid==0) { arr[tmp]=i; flag[tmp]=true; break; } } } // 打印出数组结果 for(int i:arr) { System.out.print(" "+i); } } public static void main(String[] args)
{ new magicCard(); } }