求助模拟斗地主发牌算法 如题 本人小菜 求助各位大侠 刚申请 分不多很不好意思 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 csdn搜的C# 斗地主发牌算法lz你头像很酷 汗,知道了,是怕随机到同一张牌吧。可以这样,1.把所有牌放到一个数组(单单一个数字id也行)。2.取两个随机数,最大值为数组大大小。3.交换这两个随机数对应index的数组中的值。4.重复n次 2和35.这样就把初始的数组打乱了,然后按顺序取出即可 var list= Enumerable.Range(1, 54).OrderBy(Guid.NewGuid()); //随机混乱54张牌 //上面这步最关键至于下面的我就不打算写了,无非是按顺序给3家发牌 直到最后3张 #include <stdlib.h> //标准工具库,要用到其中的rand() #include <stdio.h> #include <time.h> //时间库,要用到里面的时间来做随机数的种子#include <iostream.h>void changetocard(int);void coutone();void ntoc(int);char ntof(int i);int ir;void main(void) { int i; cout<<"玩家一\t"<<"玩家二\t"<<"玩家三\t"<<"玩家四\t"<<endl; srand(time(0)); ir=rand(); for(i=0;i<=3;i++) { ir++; coutone(); }}void coutone(){ int i,j,k,temp; //i,j为循环控制变量,temp为保存随机序号的中间变量 int normal[54]={0,1,2,3,4,5,6,7,8,9, 10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29, 30,31,32,33,34,35,36,37,38,39, 40,41,42,43,44,45,46,47,48,49, 50,51,52,53};//正常顺序的0-53 int random[54]; //存放生成的随机顺序的0-53 srand(ir); /*第一个for用来生成随机顺序的0-53并存放到random数组中*/ for(i=0;i<=54;i++) { temp=rand()%(55-i); //通过求余得到有效序号,因为每次循环后normal数组中将有一个元素被覆盖 random[i]=normal[temp]; //把这个序号在normal数组中对应的元素放到random数组中(依次) for(j=temp;j<=54;j++) //对normal数组中序号temp及以后的元素,进行依次向前覆盖的操作 normal[j]=normal[j+1]; } for(i=0;i<=54;) { for(k=0;k<=3;k++,i++) { changetocard(random[i]+1); cout<<"\t"; } cout<<endl; }}void changetocard(int i){ if(i<=52) { cout<<ntof(i/13); ntoc(i%13+1); } else if(i==53) cout<<"JOKER"; else if(i==54) cout<<"joker";}char ntof(int i)//转四花色{ switch(i) { case 0:return 3;break; case 1:return 4;break; case 2:return 5;break; case 3:return 6;break; case 4:return 6;break; default:break; }}void ntoc(int i)//转AJQK{ switch(i) { case 1:cout<<"A";break; case 11:cout<<"J";break; case 12:cout<<"Q";break; case 13:cout<<"K";break; default:cout<<i;break; }}以前用c++写的发的四副牌给四个人,改一下就可以了 11 楼的大哥 感谢你上网找了C++ 我现在也一直参考着 java和C++的来写 但是 老有错误 纠结 C# datagridview单元格操作问题 <紧急求助> 请教C#生成重启windows的程序写法 解释点代码 防伪码的生成 dataGrid字段付值的问题,很奇怪也很难 怎么把XML中的数据放到treeview中,实现增加与删除操作? 哪位做过后台windows服务和前台控制的? C#获取网站ip(高手请帮忙一下 多谢) 学习c#的书是???编译环境是???在哪里可以找到??? 客户端修改了数据,怎么通知服务端? 命名空间的问题? datagrid有多页如何点某行的编辑后该行的背景颜色加深
C# 斗地主发牌算法lz你头像很酷
可以这样,
1.把所有牌放到一个数组(单单一个数字id也行)。
2.取两个随机数,最大值为数组大大小。
3.交换这两个随机数对应index的数组中的值。
4.重复n次 2和3
5.这样就把初始的数组打乱了,然后按顺序取出即可
#include <stdlib.h> //标准工具库,要用到其中的rand()
#include <stdio.h>
#include <time.h> //时间库,要用到里面的时间来做随机数的种子
#include <iostream.h>void changetocard(int);
void coutone();
void ntoc(int);
char ntof(int i);int ir;void main(void)
{
int i;
cout<<"玩家一\t"<<"玩家二\t"<<"玩家三\t"<<"玩家四\t"<<endl;
srand(time(0));
ir=rand();
for(i=0;i<=3;i++)
{
ir++;
coutone();
}
}void coutone()
{
int i,j,k,temp; //i,j为循环控制变量,temp为保存随机序号的中间变量
int normal[54]={0,1,2,3,4,5,6,7,8,9,
10,11,12,13,14,15,16,17,18,19,
20,21,22,23,24,25,26,27,28,29,
30,31,32,33,34,35,36,37,38,39,
40,41,42,43,44,45,46,47,48,49,
50,51,52,53};//正常顺序的0-53
int random[54]; //存放生成的随机顺序的0-53
srand(ir);
/*第一个for用来生成随机顺序的0-53并存放到random数组中*/
for(i=0;i<=54;i++)
{
temp=rand()%(55-i); //通过求余得到有效序号,因为每次循环后normal数组中将有一个元素被覆盖
random[i]=normal[temp]; //把这个序号在normal数组中对应的元素放到random数组中(依次)
for(j=temp;j<=54;j++) //对normal数组中序号temp及以后的元素,进行依次向前覆盖的操作
normal[j]=normal[j+1];
} for(i=0;i<=54;)
{ for(k=0;k<=3;k++,i++)
{
changetocard(random[i]+1);
cout<<"\t";
}
cout<<endl;
}
}void changetocard(int i)
{
if(i<=52)
{
cout<<ntof(i/13);
ntoc(i%13+1);
}
else if(i==53)
cout<<"JOKER";
else if(i==54)
cout<<"joker";
}
char ntof(int i)//转四花色
{
switch(i)
{
case 0:return 3;break;
case 1:return 4;break;
case 2:return 5;break;
case 3:return 6;break;
case 4:return 6;break;
default:break;
}
}
void ntoc(int i)//转AJQK
{
switch(i)
{
case 1:cout<<"A";break;
case 11:cout<<"J";break;
case 12:cout<<"Q";break;
case 13:cout<<"K";break;
default:cout<<i;break;
}
}以前用c++写的发的四副牌给四个人,改一下就可以了