问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求一个模拟人工洗牌的程序,用c++编写,谢谢!!!12

发布网友 发布时间:2023-10-17 17:48

我来回答

3个回答

热心网友 时间:2023-12-04 04:30

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <vector>
#include <algorithm>
struct tagCard{
int nSide;//花色,0-3分别是梅花、方块、红心和黑桃
int nValue;//牌面,2 3 4 5 6 7 8 9 10 11(J) 12(Q) 13(K) 14(A)
};

//排序回调函数
bool UDgreater ( tagCard elem1, tagCard elem2 )
{
if (elem1.nSide < elem2.nSide)
return true;
else if (elem1.nSide>elem2.nSide)
return false;
else
return elem1.nValue>elem2.nValue?true:false;

}

int main(int args,char *argv[])
{
//总共52张牌,1-52,产生1-52的乱序
const char * pstrSide[] = {"梅花","方块","红心","黑桃"};
const char * pstrVal[] = {"0","0","2","3","4","5","6","7","8","9","10","J","Q","K","A"};
std::vector<tagCard> card;
std::vector<tagCard>::iterator it_Users[4][2];
int i;
//乱序
srand((unsigned int)time(0));
for (i=0;i<52;i++)
{
tagCard item;
item.nSide = i/13;
item.nValue = i%13+2;
card.push_back(item);
}
//洗牌,默认1000次
for (i=0;i<1000;i++)
{
int p = rand()%52;
int q = rand()%52;
tagCard tmp = card[p];
card[p] = card[q];
card[q] = tmp;
}
//发牌已经在洗牌同时完成了,洗好的0-51号位置,0-12是用户1,13-25为用户2, 26-38是用户3 39-51是用户4
std::vector<tagCard>::iterator it = card.begin();
//排序
for (int i=0;i<52;i++)
{
if (i%13==0)
{
it_Users[i/13][0] = it;
if (i>12)
it_Users[i/13-1][1] = it;
}
it++;
}
it_Users[3][1] = card.end();

sort(it_Users[0][0],it_Users[0][1],UDgreater);//用户1
sort(it_Users[1][0],it_Users[1][1],UDgreater);//用户2
sort(it_Users[2][0],it_Users[2][1],UDgreater);//用户3
sort(it_Users[3][0],it_Users[3][1],UDgreater);//用户4

//打印
printf("用户1\t用户2\t用户3\t用户4\n");
for (i=0;i<13;i++)
{
printf("%2s%2s\t%2s%2s\t%2s%2s\t%2s%2s\n",
pstrSide[card[i].nSide],pstrVal[card[i].nValue],
pstrSide[card[i+13].nSide],pstrVal[card[i+13].nValue],
pstrSide[card[i+13*2].nSide],pstrVal[card[i+13*2].nValue],
pstrSide[card[i+13*3].nSide],pstrVal[card[i+13*3].nValue]);
}

return 0;
}

VC2005/2008下控制台程序编译,
运行结果
用户1 用户2 用户3 用户4
梅花 A 梅花 K 梅花 3 梅花 Q
梅花 J 梅花10 方块 J 梅花 7
梅花 9 梅花 2 方块10 梅花 6
梅花 8 方块 4 方块 9 梅花 5
方块 K 方块 3 方块 8 梅花 4
方块 Q 方块 2 方块 6 方块 A
方块 7 红心 K 方块 5 红心 Q
红心 J 红心10 红心 A 红心 5
红心 4 红心 2 红心 9 黑桃 K
红心 3 黑桃 Q 红心 8 黑桃10
黑桃 A 黑桃 J 红心 7 黑桃 7
黑桃 8 黑桃 9 红心 6 黑桃 4
黑桃 6 黑桃 3 黑桃 5 黑桃 2
请按任意键继续. . .

热心网友 时间:2023-12-04 04:30

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

typedef struct card {
int cdhs; //1,2,3,4
int point; //1,2,..13;
} CARD;

CARD cards[52];
void main()
{
int i,j,k,n;
int x[52],y;
int flag[52];
char p[13][5]={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
char h[4][5] = {"S","H","D","C"};

for (j=0;j<4;j++){
for (i=0;i<13;i++){
cards[j*13+i].cdhs= j %4 ;
cards[j*13+i].point= i %13;
}};

for (i=0;i<52;i++) flag[i]= -1;
srand((unsigned)time(NULL));
n=0;
while(1) {
y = (int) ( (float)rand() / ((float)(RAND_MAX)) * 53.0);
if (y < 52 && y >= 0) { if ( flag[y] == -1)
{ x[n]=y; flag[y]=1;n++; if (n>=52)break; };
}; // end if
};

for (k=0;k<4;k++)
for (i=0;i<12;i++)
for(j=i;j<13;j++){
if (x[i+k*13]< x[j+k*13]){y=x[i+k*13];x[i+k*13]=x[j+k*13];x[j+k*13]=y;};
}
printf("Person-1: ");
for (i=0;i<13;i++){ printf("%s%s ",h[cards[x[i]].cdhs],p[cards[x[i]].point]);
}
printf("\nPerson-2: ");
for (i=13;i<26;i++){ printf("%s%s ",h[cards[x[i]].cdhs],p[cards[x[i]].point]);
}
printf("\nPerson-3: ");
for (i=26;i<39;i++){ printf("%s%s ",h[cards[x[i]].cdhs],p[cards[x[i]].point]);
}
printf("\nPerson-4: ");
for (i=39;i<52;i++){ printf("%s%s ",h[cards[x[i]].cdhs],p[cards[x[i]].point]);
}
printf("\n");
system("pause");
}

热心网友 时间:2023-12-04 04:31

#include <memory.h>
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

const int NUM = 52;
const int DECK = 13;
enum SortType {SUIT, VALUE};
typedef struct CARD
{
int suit; // 取值0 - 3,分别表示梅花、方块、红心和黑桃
int value; // 取值2 - 10、J(11)、Q(12)、K(13)、A(14)
} Card;

void suffle(Card *cards)
{
int i, j, t;
Card c;
srand(time(NULL));

for (i = 0; i < NUM; ++i)
for (j = 0; j < NUM; ++j)
{
t = rand() % NUM;

if (j != t)
{
memcpy(&c, &cards[t], sizeof(Card));
memcpy(&cards[t], &cards[j], sizeof(Card));
memcpy(&cards[j], &c, sizeof(Card));
}
}
}

void sort(Card *cards, int size, SortType stype)
{
int i, j, k;
Card t;

for (i = 0; i < size-1; ++i)
{
k = i;

for (j = i + 1; j < size; ++j)
{
if ((stype == SUIT) && (cards[k].suit > cards[j].suit))
k = j;
else if ((stype == VALUE) && cards[k].value < cards[j].value)
k = j;
}

if (k != i)
{
memcpy(&t, &cards[i], sizeof(Card));
memcpy(&cards[i], &cards[k], sizeof(Card));
memcpy(&cards[k], &t, sizeof(Card));
}
}
}

void show(int suit, int value)
{
static char values[] = {'2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K', 'A'};

switch (suit)
{
case 0:
cout << "梅花 ";
break;
case 1:
cout << "方块 ";
break;
case 2:
cout << "红心 ";
break;
case 3:
cout << "黑桃 ";
break;
}

if (value == 10)
cout << "10";
else
cout << values[value-2];

cout << "\t\t";
}

void sortValue(Card *cards)
{
int p[4] = {0, 0, 0, 0};
int i, j;

for (i = 0; i < DECK; ++i)
++p[cards[i].suit];

j = 0;

for (i = 0; i < 4; ++i)
{
sort(cards + j, p[i], VALUE);
j += p[i];
}
}

void main(void)
{
Card cards[NUM];
Card A[DECK], B[DECK], C[DECK], D[DECK];
int i, j, s = 0, v = 2;

for (i = 0; i < NUM; ++i)
{
cards[i].suit = s;
cards[i].value = v;
++v;

if ((i+1) % 13 == 0)
{
++s;
v = 2;
}
}

suffle(cards);

j = 0;

for (i = 0; i < NUM; i += 4)
{
memcpy(&A[j], &cards[i], sizeof(Card));
memcpy(&B[j], &cards[i+1], sizeof(Card));
memcpy(&C[j], &cards[i+2], sizeof(Card));
memcpy(&D[j], &cards[i+3], sizeof(Card));
++j;
}

sort(A, DECK, SUIT);
sortValue(A);
sort(B, DECK, SUIT);
sortValue(B);
sort(C, DECK, SUIT);
sortValue(C);
sort(D, DECK, SUIT);
sortValue(D);

cout << "PLAYER 1" << "\t" << "PLAYER 2" << "\t";
cout << "PLAYER 3" << "\t" << "PLAYER 4" << endl;

for (i = 0; i < DECK; ++i)
{
show(A[i].suit, A[i].value);
show(B[i].suit, B[i].value);
show(C[i].suit, C[i].value);
show(D[i].suit, D[i].value);
cout << endl;
}

system("PAUSE");
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
梦见穿堂风 没有爱情我们一样会快乐的对吗 没有爱情的人会快乐么? 解除合同的效力有什么 合同解除会产生什么法律效力 合同解除后,哪些条款仍具效力? 合同解除产生哪些效力呢 民法典中合同解除产生哪些效力 解除合同的效力有哪些 济南七中学校怎么样 2014科帕奇7座旗舰版,原厂导航地图怎么更新? 芦笋有什么药物可以杀菌? 让我们 一起唱 有这句歌词的是什么歌啊3 玄幻小说,男主被野兽养大,后来被带到城市,现代文, 过早对幼儿的智力进行开发是可行的吗?? 索尼3和4的优势 RX100 M3&#47;M4的区别值得买吗4 哈尔滨哪里配眼镜最好?(又好又便宜)35 JLINK与JTAG的区别是什么?12 Jtag与Jlink有什么区别178 买两量车税会增加吗4 什么冰箱可以用电瓶3 请问:JTAG接口是什么?224 长期使用车载冰箱对电瓶有影响吗5 mr.moondoesn&#39;thaveabirthday.意思10 一个人购买第二两车时那个购置锐会不会多5 身份证拉黑名单,怎么才能拉出来? 统计局和教育局哪个单位好?作为科员的话哪个有发展待遇好点? 跪求请问请问身份证被联通拉入黑名单怎么拉出来? 审计局和统计局哪个待遇好,发展好,麻烦“ 怎么办能让他身份证黑名单,买不了车票什么? 求一本现代东方玄幻小说的书名,男主因某原因来到一所普通高校,... 求一部小说,,,要求主角穿越或者重生,,,重生成妖兽或者野兽... 求一本小说,主角重生成老虎,是现代的,不是什么重生成妖 在民航操作系统里 AIRPORT CNTL 状态是什么意思?25 mr.moon doesn&#39;t have a birthda... mr.moondoesn&#39;thaveabirthday.改陈... mr. moon doesn&#39;t has a birthda...2 MrMoonwillhaveabirthdayeverymo...1 Mr。green doesn&#39;t have a brothe...3 ...关键字基本上都设置成一样的百度能够收录吗? 什么是电子照片啊?473 电子版照片是什么意思712 电子照片是什么8 吃发霉的年糕有什么后果34 雪佛兰科帕奇原车导航改凯立德端口号多少 郑州B1公交车路线640 从庙里经过未来路德风街的公交车 从郑州未来路德风街到嵩山路陇海路的公交车1 郑州未来路徳风街站到上街怎么坐车 电视剧于圣龙第十一集