纸牌发牌程序,数据结构

一下是一个纸牌发牌游戏。其中函数及其思路皆为个人所写。虽然我不知道别人会不会跟我一样。但是这个我确实是从头到尾独立思考。我的个人准则是,能想出来的,绝不找度娘。

#include<iostream>

#include<stdlib.h>
#include<stdio.h>
using namespace std;
int pk[53]={0,
101,201,301,401,
102,202,302,402,
103,203,303,403,
104,204,304,404,
105,205,305,405,
106,206,306,406,
107,207,307,407,
108,208,308,408,
109,209,309,409,
110,210,310,410,
111,211,311,411,
112,212,312,412,
113,213,313,413};
//交换函数
void swap(int& a,int& b)
{
int c;
c=a;
a=b;
b=c;

//洗牌 
void randa()
{
int a,c,k,i;
for(i=0;i<50;i++)
{

do{
a=rand()%52;
k=rand()%52;
}while(k==a);
swap(pk[a],pk[k]);
}
}
//具体输出 
 int opk(int i)
 {
int a,b;
a=i/100;
b=i%100;
  switch(a)
  {
  case 1:
  cout<<"方块";
  break;
  case 2:
  cout<<"梅花";
  break;
  case 3:
  cout<<"红桃";
  break;
  case 4:
  cout<<"黑桃";
  break;
  }
  switch(b)
  {
  case 10:
  cout<<"10";
  break;
  case 11:
  cout<<"J";
break;
case 12:
cout<<"Q";
 break;
 case 13:
  cout<<"K";
 break;
 case 1:
  cout<<"A";
 break;
 default:
  cout<<i%10; 
  }
  cout<<" ";
 }
//发牌
int fapai(int k)//k代表第K名玩家 
{
int i,j;
int a[13];
for(i=0;i<13;i++)
{
a[i]=pk[k+i*4];
}
//冒泡排序 
for(i=0;i<12;i++)
for(j=0;j<13-i-1;j++)
{
if(a[j]>a[j+1])
swap(a[j],a[j+1]);
}
cout<<"第"<<k<<"名玩家的牌为"<<endl;
for(i=0;i<13;i++)
opk(a[i]);
cout<<endl; 
return 0;



int main()
{
randa();
fapai(1);
fapai(2);
fapai(3);
fapai(4); 
return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1.纸牌游戏 任务:编号为1-52张,正面向上,从第2张开始,以2为基数,是2的倍数的翻一次,直到最后一张;然后,从第3张开始,以3为基数,是3的倍数的翻一次,直到最后一张;然后…从第4张开始,以4为基数,是4的倍数的翻一次, 直到最后一张;...再依次5的倍数的翻一次,6的,7的 直到 以52为基数的 翻过,输出:这时正面向上的有哪些? 题目比较简单。但用了MFC的一些知识,实现了图形化,比较形象。 2.哈弗曼压缩 实现哈弗曼压缩及解压缩功能,并计算压缩前后文件占用空间比 模型建立与题目分析 压缩: 以二机制可读形式打开源文件,以二进制可写形式打开压缩目标文件。每次从源文件读取八个比特(一字节),作为一个ASCII码,并统计所有出现的字节的频率,将字节作为哈夫曼数的叶子结点插入到一个链表中。然后根据链表建立哈夫曼树,按照哈夫曼算法对所有出现的字节编码。然后重新从头开始读源文件,每次读入一字节,从哈夫曼树相应叶子结点移到树的根结点,在找的过程中,把其哈夫曼编码存入一个栈,把栈中所有元素(0或1)写到缓冲区,如果缓冲区比特数到8了,则将缓冲区的8个比特(一个字节)写入压缩文件。如果最后缓冲区不到8比特,则在低位补零,补齐8位后写入压缩文件。 解压: 以二进制可读形式打开解压文件,以二进制可写形式打开解压目标文件。每次从解压文件读一个字节,放入缓冲区,然后从缓冲区每次读一个比特。在建立的哈夫曼树中,从根结点开始,取出的比特为0则取左孩子,为1取右孩子,直至到叶子结点,把叶子结点的字节(ASCII码)写入解压目标文件。读到缓冲区为空时,再读入一个字节,重复上述操作,直到读完压缩文件。 模型实质: 以二进制读取文件。从源文件每次读一个字节(8比特),并统计所有出现字节的频率,根据频率对所有字节以频率作为权值建立哈夫曼树,对每个字节重新编码。根据新的编码进行编码译码。 算法设计与分析 如果已知出现字符的出现频率,将较短的比特串分给高频字符,将较长的比特串分给低频字符,则会到压缩文件的目的。哈夫曼编码就是利用这一点,以字符作为叶子结点,以其频率作为权值,建立最优二叉树。 一 下面先重点讨论一下建立哈夫曼数的算法。哈夫曼算法: 根据给定叶子结点及其权值(这里即字符及其频率)构成二叉树的集合,每个叶子结点作为一棵树的根结点。 在二叉树集合中选取根结点权值最小的树作为左右子树构造新的二叉树,且新二叉树的权值为左右子树权值之和。 从二叉树集合中删除这两棵树,将新构造的树加入集合 4 . 重复2,3,直至二叉树集合中只有一棵树。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值