鱼丸07 2020-01-30 15:37 采纳率: 33.3%
浏览 575
已采纳

C语言 发牌与洗牌的模拟

#include
#include
#include

void shuffle(int Deck[][13])
{
int i;
for(i=1;i<=52;i++)
{
int row = rand() % 4;
int column =rand() %13;
if(Deck[row][column]==0)
Deck[row][column]=i;
}

}

void deal(int Deck[][13],char *suit[],char *value[])
{
int i,column,row;
printf("玩家1\t玩家2\t玩家3\t玩家4\t");
for(i=1;i<=52;i++)
{
row=0;
if(row<=3)
{
column=0;
if(column<=12)
{
printf(" %c%2c",row,column);

        }
        if(i%4==0) printf("\n");
        column++;
    }
    row++;
}
return 0;

}
int main()
{
char *suit[4]={"红桃","方片","草花","黑桃"};
char *value[13]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};

int Deck[4][13];
srand(time(NULL));
shuffle(Deck);
deal(Deck,suit,value);
return 0;

}

图片说明

运行结果不对,哪位大神能看一看是哪里出错了吗?谢谢

  • 写回答

1条回答 默认 最新

  • Weird奇谭 2020-01-30 21:17
    关注

    首先,那个viod型是不需要返回值return 0去掉
    其次你这个是改错题还是编程题,我有两种办法,第一种是在你的基础上改代码
    还有一种是用另一种方法只要一个自定义函数求解
    第一个是在你的基础上改的:

    #include <stdio.h>
    void shuffle(int Deck[][13])
    {
        int i;
        for(i=1;i<=52;)
        {
            int row = rand() % 4;
            int column =rand() %13;
            if(Deck[row][column]==0)
            {
                Deck[row][column]=i;
                i++;
            }
        }
    }
    
    
    void deal(int Deck[][13],char *suit[],char *value[])
    {
        int i=0,column,row,flag=0;
        printf("玩家1\t玩家2\t玩家3\t玩家4\n");
        for(i=1;i<=52;i++)
        {
            flag=0;
            for(row=0;row<=3;row++)
            {
                for(column=0;column<=12;column++)
                {
                    if(Deck[row][column]==i){
                        flag=1;
                        break;
                    }
                }
                if(flag==1) break;
            }
            printf("%s%2s\t",suit[row],value[column]);
            if(i%4==0) printf("\n");
        }
    
    }
    
    
    int main()
    {
        char *suit[4]={"红桃","方片","草花","黑桃"};//指针数组
        char *value[13]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
    
        int Deck[4][13]={0};//二维数组
        srand(time(NULL));
    
    
        shuffle(Deck);
    
        deal(Deck,suit,value);//发牌
        return 0;
    }
    

    第二个是我的想法:

    #include <stdio.h>
    void deal(char *suit[],char *value[]);
    int main()
    {
        char *suit[4]={"红桃","方片","草花","黑桃"};//指针数组
        char *value[13]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
        srand(time(NULL));
        deal(suit,value);//发牌
        return 0;
    }
    void deal(char *suit[],char *value[])
    {
        int i,column,row;
        int cun[52]={0},j,a,b;
        printf("玩家1\t玩家2\t玩家3\t玩家4\n");
        for(i=1;i<=52;i++)
        {
            j=rand() % 52;
            a=j/13;
            b=j%13;
    
            if(cun[j]==0)
            {
                cun[j]=60;  
                printf("%s%2s\t",suit[a],value[b]);
                if(i%4==0)
                    printf("\n");
            }
            else
                i-=1;
        }
    
    }
    

    如有错误也请帮忙指正,谢谢

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥30 软件自定义无线电该怎样使用
  • ¥15 Jenkins+k8s部署slave节点offline
  • ¥15 微信小游戏反编译后,出现找不到分包的情况
  • ¥15 如何实现从tello无人机上获取实时传输的视频流,然后将获取的视频通过yolov5进行检测
  • ¥15 WPF使用Canvas绘制矢量图问题
  • ¥15 用三极管设计一个单管共射放大电路
  • ¥15 孟德尔随机化r语言运行问题
  • ¥15 pyinstaller编译的时候出现No module named 'imp'
  • ¥15 nirs_kit中打码怎么看(打码文件是csv格式)
  • ¥15 怎么把多于硬盘空间放到根目录下