寒冬作业 洗牌2

 

 

问题1的链接

 

注:代码仅供参考,需要拿来交作业的,请大幅度需改我设置的变量名,和一些无关紧要的代码行的顺序,另外加多一些中文的输出说明,不过还是建议没思路的同学能看懂后,自己敲一遍

 

 

荷官洗牌

public class 荷官洗牌 {

	public static void main(String[] args) {
		int[] card = new int[52];
		int[] ans = new int[52];
		int n=card.length;
		for(int i=0;i<n;i++)
			card[i]=i+1;
		int mid = (int)(Math.random()*52);
		int i=0,j=mid,p=0;//3个指针
		
		while(i<mid && j<n)//当2堆牌都不为空时,循环继续
		{
			ans[p++]=card[i++];
			ans[p++]=card[j++];
		}
		while(i<mid)//把左部分剩余没发完的发下去
			ans[p++]=card[i++];
		while(j<n)//把右部分剩余没发完的发下去
			ans[p++]=card[j++];
		//测试
		System.out.println("mid:"+mid);
		for(int x:ans)
			System.out.print(x+" ");
	}

}

 

普通人洗牌

/**
 * 
 * @author 叶叶
 *
 */
public class 普通人洗牌 {

	public static void main(String[] args) {
		int[] card = new int[52];
		int[] ans = new int[52];
		int n=card.length;
		for(int i=0;i<n;i++)
			card[i]=i+1;
		int mid = (int)(Math.random()*52);
		int i=0,j=mid,p=0;//3个指针
		while (i < mid && j < n) {
			int x = 1 + (int) (Math.random() * 3);
			int y = 1 + (int) (Math.random() * 3);
			for (int k = 0; k < x && i<mid; k++)//随机的k小于发牌数,同时下标也要小于mid
				ans[p++] = card[i++];
			for (int k = 0; k < y && j<n; k++)//随机的k小于发牌数,同时下标也要小于n
				ans[p++] = card[j++];
		}
		while(i<mid)
			ans[p++]=card[i++];
		while(j<n)
			ans[p++]=card[j++];
		//测试
		System.out.println("mid:"+mid);
		for(int x:ans)
			System.out.print(x+" ");
	}

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值