| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8187 人关注过本帖
标题:扑克牌发牌游戏。模拟扑克牌发牌过程,只考虑4种花色的52张牌,每次随机发1 ...
只看楼主 加入收藏
abc594986308
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:168
专家分:116
注 册:2013-3-18
结帖率:82.93%
收藏
已结贴  问题点数:30 回复次数:9 
扑克牌发牌游戏。模拟扑克牌发牌过程,只考虑4种花色的52张牌,每次随机发13张牌。利用指针模拟这一过程
书上的程序看不懂啊,求个注释,有劳,谢谢大家
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
   int n,m,t,flag,i,j,*p;
   int a[4][13];
   srand((unsigned)time(NULL));
   for(i=0;i<4;i++)
       for(j=0;j<13;j++)
           a[i][j]=0;
       t=1;
       while(t<=13)
       {
           n=rand()%4;
           printf("%d ",n);
           m=rand()%13;
           flag=1;
           if(a[n][m]==1) flag=0;
           if(flag) {a[n][m]=1;t++;}
       }
       p=a[0];
       t=0;
       for(i=0;i<4;i++)
       {
           if(i==0) printf("%s","黑桃:");
           else if(i==1) printf("%s","红桃:");
           else if(i==2) printf("%s","梅花:");
           else  printf("%s","方片:");
           for(j=0;j<13;j++)
           if(*(p+13*i+j)==1)
               {
                   if(j+1==1) printf("%3c",'A');
                       else if(j+1==11) printf("%3c",'J');
                       else if(j+1==12) printf("%3c",'Q');
                       else if(j+1==13) printf("%3c",'K');
                       else printf("%3d",j+1);
               }
           printf("\n");
       }
       return 1;
}
搜索更多相关主题的帖子: include 扑克牌 
2013-04-24 11:25
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:6 
建议你多看几遍,找出真正不能理解的地方,有争对性讨论对你也许更有帮助,或许你到时自己不讨论
都懂了。

www.qunxingw.wang
2013-04-24 12:18
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:6 
帮你排一下版,注释自己填吧,多看几遍就懂咯,写的蛮细致
程序代码:
#include<time.h>
#include<stdio.h>
#include<stdlib.h>

int main(void)
{
    int a[4][13];
    int n, m, t, flag, i, j, *p;
    
    srand((unsigned)time(NULL));
    
    for(i=0;i<4;i++)
    for(j=0;j<13;j++)
        a[i][j]=0;
    
    t = 1;
    while(t <= 13)
    {
        n = rand() % 4;
        m = rand() % 13;
//      printf("%d ", n);
        
        flag = 1;
        if(a[n][m] == 1) flag=0;
        if(flag)
        {
            a[n][m] = 1;
            t++;
        }
    }

    p = a[0];    t = 0;
    for(i=0;i<4;i++)
    {
        if(i == 0)                printf("黑桃:");
        else if (i == 1)          printf("红桃:");
        else if (i == 2)          printf("梅花:");
        else                      printf("方片:");

        for(j=0;j<13;j++)
                if(*(p+13*i+j)==1)
            {
                if (j+1 == 1)          printf("%3c", 'A');
                else if (j+1 == 11)    printf("%3c", 'J');
                else if (j+1 == 12)    printf("%3c", 'Q');
                else if (j+1 == 13)    printf("%3c", 'K');
                else                   printf("%3d", j+1);
            }

        printf("\n");
    }
    return 1;
}



[fly]存在即是合理[/fly]
2013-04-24 12:51
bczger
Rank: 2
等 级:论坛游民
帖 子:13
专家分:11
注 册:2013-4-21
收藏
得分:6 
flag = 1;
        if(a[n][m] == 1) flag=0;
        if(flag)
        {
            a[n][m] = 1;
            t++;
这一块儿写成这样行么:
 if(!a[n][m])   
        {
            a[n][m] = 1;
            t++;
        }
求解??
2013-04-24 23:27
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
回复 4楼 bczger
可以

t += !a[n][m];
a[n][m] = 1;

这个写法你看看


[fly]存在即是合理[/fly]
2013-04-25 13:11
bczger
Rank: 2
等 级:论坛游民
帖 子:13
专家分:11
注 册:2013-4-21
收藏
得分:0 
回复 5楼 azzbcc
书上怎么更复杂,加个flag,半天才看懂
2013-04-25 20:35
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:0 
理解的角度不一样。就算是同一个人在不同的时间理解同一问题有时也有区别。4楼我个人感觉还更好理解。原来的二个条件语句换个先后次序感觉要好理解。

www.qunxingw.wang
2013-04-25 20:46
bczger
Rank: 2
等 级:论坛游民
帖 子:13
专家分:11
注 册:2013-4-21
收藏
得分:0 
自己编了遍,稍微改了点,怎么运行完了就出问题了。。
程序代码:
#include "stdio.h"
#include "time.h"
#include "stdlib.h"
void main()
{
    int a[4][13];
    int i,j,m,n,*p;

    srand((unsigned)time(NULL));

    for(i=0;i<4;i++)
        for(j=0;j<13;j++,a[i][j]=0);

    i=0;

    while(i<13)
    {
        m=rand()%4;
        n=rand()%13;
        if(!a[m][n])//这里不一样
        {
            a[m][n]    = 1;
            i++;
        }
    }
   
    p = *a;

    for(i=0;i<4;i++)
    {
        if     (i == 0)printf("黑桃:\t");
        else if(i == 1)printf("红桃:\t");
        else if(i == 2)printf("梅花:\t");
        else           printf("方片:\t");

        for(j=0;j<13;j++)
            if(*(p+i*13+j)==1)
                switch(j+1)//这里不一样,其他都差不多吧
            {
                case 11:    printf("J\t");break;
                case 12:    printf("Q\t");break;
                case 13:    printf("K\t");break;
                case 1:     printf("A\t");break;
                default:    printf("%d\t",j+1);break;
            }
        printf("\n");
    }
}
2013-04-25 22:15
tompobing
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:260
专家分:809
注 册:2012-12-9
收藏
得分:6 
。。。
2013-04-28 08:55
zhangsi1
Rank: 2
来 自:安徽芜湖
等 级:论坛游民
帖 子:38
专家分:87
注 册:2012-10-4
收藏
得分:6 
原来的二个条件语句换个先后次序
2013-04-30 17:10
快速回复:扑克牌发牌游戏。模拟扑克牌发牌过程,只考虑4种花色的52张牌,每次随 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.048632 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved