扑克牌洗牌发牌过程模拟

扑克牌洗牌发牌过程模拟,第1张

#include <stdioh>

#include <stdlibh>

#include <timeh>

const int TOTAL = 52;

const int PLAYERS = 4;

const int MAXSIZE = TOTAL/PLAYERS;

const int TYPES = 4;

typedef struct card {

int type; //  type 0:梅花,1:方片,2:红桃,3:黑桃

int point; // point = 2 -- 14 

}CARD;

void sort(int a[][TYPES][MAXSIZE]) {

int i,j,k,m,n,t,size;

for(m = 0; m < PLAYERS; ++m) {

for(n = 0; n < TYPES; ++n) {

for(size = 0; a[m][n][size]; ++size);

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

k = i;

for(j = i + 1; j < size; ++j) {

if(a[m][n][k] < a[m][n][j]) k = j;

}

if(k != i) {

t = a[m][n][k];

a[m][n][k] = a[m][n][i];

a[m][n][i] = t;

}

}

}

}

}

void show(int a[][TYPES][MAXSIZE]) {

int i,j,k;

char type[TYPES] = {'\5','\4','\3','\6'};

char player[PLAYERS][6] = {"EAST","SOUTH","WEST","NORTH"};

char point[] = "JQKA";

for(k = 0; k < PLAYERS; ++k) {

printf("<%s>\n",player[k]);

for(i = 0; i < TYPES; ++i) {

printf(" %c  ",type[i]);

for(j = 0; j < MAXSIZE && a[k][i][j];++j) {

if(a[k][i][j] < 11) printf("%d ",a[k][i][j]);

else printf("%c ",point[a[k][i][j] - 11]);

}

printf("\n");

}

printf("\n");

}

}

int Has(int a[][TYPES][MAXSIZE],CARD Card) {

int i,j;

for(i = 0; i < PLAYERS; ++i) {

for(j = 0; j < MAXSIZE && a[i][Cardtype][j]; ++j)

if(a[i][Cardtype][j] == Cardpoint)

return 1;

}

return 0;

}

int isFull(int a[][MAXSIZE]) {

int n = 0,i,j;

for(i = 0; i < TYPES; ++i) {

for(j = 0; a[i][j] && j < MAXSIZE; ++i)

++n;

}

return n == MAXSIZE;

}

int addCard(int a[PLAYERS][TYPES][MAXSIZE],CARD Card) {

int i = 0;

if(Has(a,Card)) return 0;

int who = rand()%PLAYERS;

while(isFull(a[who])) who = (who + 1)%PLAYERS;

while(a[who][Cardtype][i]) ++i;

a[who][Cardtype][i] = Cardpoint;

return 1;

}

int main() {

int i,playingCard[PLAYERS][4][MAXSIZE] = {0};

CARD t;

srand((unsigned)time(NULL));

for(i = 0; i < TOTAL; ++i) {

ttype = rand()%4; 

tpoint = rand()%13 + 2;

if(addCard(playingCard,t) == 0) --i;

}

sort(playingCard);

show(playingCard);

return 0;

}

这几个题是我这学期的 *** 作系统实验里面,变了两个月才弄出来的,现在跟你分享一下(运行过了 没问题的)

先来先服务:c语言编写的

#include <stdioh>

#include <malloch>

typedef struct jinchen  //定义结构体

{

char name[5];

int tijiaoshijian;

int reachtime;

int runtime;

int beirun;

int accomplishtime;

char state;

int flag;

struct jinchen next;

}PCB;

PCB finish,ready;//定义队列 一个完成一个就绪

int time=0;

int t=0;

int num;

void InitPcb()    //进程初始化

{

int i,j=0;

PCB p,q,l,m,k,n;

printf("请输入进程个数:");

scanf("%d",&num);

ready=(PCB )malloc(sizeof(PCB));

ready->next=NULL;

finish=(PCB )malloc(sizeof(PCB));

finish->next=NULL;

l=(PCB )malloc(sizeof(PCB));

l->next=NULL;

p=l;

for(i=0;i<num;i++)

{

q=(PCB )malloc(sizeof(PCB));

printf("\n进程号 %d:\n",i);

printf("请输入进程名:");

scanf("%s",q->name);

q->reachtime=0;

printf("请输入提交时间:");

scanf("%d",&(q->tijiaoshijian));

printf("请输入运行时间:");

scanf("%d",&(q->runtime));

q->beirun=q->runtime;

q->state='R';

q->flag=0;

if(i!=0)       //链接就绪进程

{

//q->next=NULL;

q->next=p->next;

p->next=q;

p=p->next;

}

else    //第一个进程插入就绪队列

{

p->next=q;

p=p->next;

p->next=NULL;

}

}

p=l->next;

k=ready;

for(i=0;i<num;i++)   //按照提交时间排序

{

q=l->next;

t=1000;

while(q!=NULL)

{

if(q->tijiaoshijian<t&&q->flag==0)

{

t=q->tijiaoshijian;

m=(PCB )malloc(sizeof(PCB));

m->next=NULL;

m->accomplishtime=q->accomplishtime;

m->beirun=q->beirun;

m->flag=q->flag;

for(j=0;j<5;j++)

m->name[j]=q->name[j];

m->reachtime=q->reachtime;

m->runtime=q->runtime;

m->state=q->state;

m->tijiaoshijian=q->tijiaoshijian;

n=q;

}

q=q->next;

}

p=p->next;

n->flag=1;

m->flag=1;

k->next=m;

k=k->next;

}

k->next=NULL;

}

void display()   //函数作用:计算和显示相关输出

{

PCB p;

int m,n=0,k=0,l;

p=finish->next;

while(p!=NULL)

{

printf("进程名 :%s",p->name);

m=p->accomplishtime-p->tijiaoshijian;

printf("周转时间:%d",m);

l=m/(p->beirun);

printf("带权周转时间:%d",l);

printf("\n");

n=m+n;

k=l+k;

p=p->next;

}

printf("平均周转时间:%d\n",n/num);

printf("平均带权周转时间:%d\n",k/num);

}

void Use()//进程调用

{

int j;

PCB p=ready->next,k=ready,q,n=finish;

while(k->next!=NULL)

{

p=ready->next;

for(j=0;j<num&&p!=NULL;j++)

{

time++;

//printf("%d\n\n",++t);

if(p->reachtime==0)

p->reachtime=time;

if(p->state!='C')

{

printf("正在运行:%s\n",p->name);

p->runtime--;

if(p->runtime!=0)    //进程没有运行完,放入队列最后

{

q=p;

while(q->next!=NULL)

q=q->next;

ready->next=p->next;

q->next=p;

p=ready->next;

q=q->next;

q->next=NULL;

}

else    //进程运行完,放入完成队列

{

p->state='C';

printf("%s进程完成\n",p->name);

p->accomplishtime=time;

n->next=p;

n=p;

ready->next=p->next;

p->next=NULL;

}

}

}

}

}

int main()

{

PCB p;

InitPcb();

Use();

display();

p=finish->next;

printf("运行完毕!说明:已运行完成的进程放入完成队列,未运行完成的进程放在队列最后");

}

运行结果见图

按最高优先级算法:C++程序

#include <stdioh>

#include <stdlibh>

#include <conioh>

#define getpch(type) (type)malloc(sizeof(type))

struct pcb{

char name[5];

char state;

int super;

int needtime;

int rtime;

int tijiaotime;

int starttime;

int ftime;

int zztime;

int dzztime;

struct pcb link;

}ready=NULL, p;

typedef struct pcb PCB;

float pzztime=0;

float pdzztime=0;

int n;

int time=20;

void sort()

{

PCB first, second;

int insert=0;

if((ready==NULL)||((p->super)<(ready->super)))

{

p->link=ready;

ready=p;

}

else

{

first=ready;

second=first->link;

while(second!=NULL)

{

if((p->super)<(second->super))

{

p->link=second;

first->link=p;

second=NULL;

insert=1;

}

else

{

first=first->link;

second=second->link;

}

}

if(insert==0) first->link=p;

}

}

void input()

{

int i;

PCB q;

printf("请输入进程数:");

scanf("%d",&n);

for(i=0;i<n;i++)

{

printf("\n第%d个进程:\n",i);

p=getpch(struct pcb);

printf("\n 进程名:");

scanf("%s",&p->name);

printf("\n 优先级:");

scanf("%d",&p->super);

printf("\n 运行时间:");

scanf("%d",&p->needtime);

printf("\n提交时间:");

scanf("%d",&p->tijiaotime);

p->rtime=0;

p->state='R';

p->link=NULL;

sort();

}

q=ready;

}

int space()

{

int l=0;

PCB pr=ready;

while(pr!=NULL)

{

l++;

pr=pr->link;

}

return(l);

}

void disp(PCB p2)

{

time = p2->tijiaotime > time p2->tijiaotime:time;

p2->starttime=time;

time+=p2->needtime;

p2->state='R';

p2->ftime=time;

p2->zztime=p2->ftime-p2->tijiaotime;

p2->dzztime=p2->zztime/p2->needtime;

pzztime=p2->zztime+pzztime;

pdzztime=p2->dzztime+pdzztime;

printf("周转时间:%d\n",p->zztime);

printf("带权周转时间为 %d\n",p->dzztime);

}

void destroy()

{

free(p);

}

void running()

{

p->rtime=p->rtime+1;

if(p->rtime==p->needtime)

{ p->state='C';

printf("%s",p->name);

printf("运行完毕\n");

disp(p);

destroy();

}

else

{

(p->super)++;

sort();

printf("正在运行进程%s\n",p->name);

}

}

void main()

{

int len,h=0;

input();

len=space();

while((len!=0)&&(ready!=NULL))

{

h++;

p=ready;

ready=p->link;

p->link=NULL;

running();

}

pzztime=pzztime/n;

pdzztime=pdzztime/n;

printf("\n平均周转时间:%f\n平均带权周转时间为%f\n",pzztime,pdzztime);

}

以上就是关于扑克牌洗牌发牌过程模拟全部的内容,包括:扑克牌洗牌发牌过程模拟、进程调度模拟程序、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10093112.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存