求助一道C语言的题目. (速度).....

作者&投稿:养政 (若有异议请与网页底部的电邮联系)
求助一道c语言题目?~

i==0时,满足i<1,直接进入下次循环,之后的i++语句没有执行,导致之后i值始终是0,所以是个死循环

在main函数中没有对b数组进行初始化操作
b[10]不是存放大于100岁的人数么 当a[i]大于等于100 b[10]加1

/*一副扑克有52张牌,打升级时应将牌分给四个人。请设计一个程序完成自动发牌的工作。

要求:黑桃用S(Spaces)表示;红桃用H(Hearts)表示;方块用D(Diamonds)表示;梅花用C(Clubs)表示。

问题分析与算法设计
按照打升级的规定,每人应当有13张牌。在人工发牌时,先进行洗牌,然后将洗好的牌按一定的顺序发给每一个人。
为了便于计算机模拟,可将人工方式的发牌过程加以修改:先确定好发牌顺序:1、2、3、4;将52张牌顺序编号
:黑桃2对应数字0,红桃2对应数字1,方块2对应数字2,梅花2对应数字3,黑桃3对应数字4,红桃3对应数字5,…
然后从52 张牌中随机的为每个人抽牌(也可以采取其它的编号方式)。
这里可以采用C语言库函数的随机函数,生成0到51之间的共52个随机数,以产生洗牌后发牌的效果。

运行示例:
S K J 8
H A J 5 3
D Q 8
C K J 7 5

S A T 6 4 2
H 4 2
D 7 6 4
C Q T 9

S 9 7 5 3
H K Q T 9
D J 3 2
C 8 2

S Q
H 8 7 6
D A K T 9 5
C A 6 4 3
思考题(必须完成):完成2副牌的自动发牌,每人应当有26张牌,而且需将每家所得的牌进行排序。
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>

#define CARD_NUM_OF_A_PACK 52
#define NUM_OF_PLAYERS 4
#define NUM_ONEPACK_OF_PLAYER (CARD_NUM_OF_A_PACK/4)

#define SIZE (sizeof(Card_t)*CARD_NUM_OF_A_PACK)

typedef struct tagCard
{
char value;
char color;
}Card_t;

void CardInit(Card_t **pInCard)
{
Card_t *pCard = *pInCard;
Card_t *pTempCard = NULL;
int i;
int j;

memset(pCard,0,SIZE);
pTempCard = pCard;

for(j = 1;j <= 4;j++)
{
for (i = 1;i <= CARD_NUM_OF_A_PACK/4;i++)
{
if (1 == j)
{
pTempCard->color = 'S';
}
else if (2 == j)
{
pTempCard->color = 'H';
}
else if (3 == j)
{
pTempCard->color = 'D';
}
else if (4 == j)
{
pTempCard->color = 'C';
}

if (i <= 10)
{
pTempCard->value = i;
}
else if(i == 11)
{
pTempCard->value = 'J';
}
else if(i == 12)
{
pTempCard->value = 'Q';
}
else if(i == 13)
{
pTempCard->value = 'K';
}
pTempCard++;
}
}

return;

}

void CardFree(Card_t **pCard)
{
if (*pCard)
{
free(*pCard);
*pCard = NULL;
}
}

void Deal(Card_t **pInCard)
{
Card_t players[NUM_OF_PLAYERS][CARD_NUM_OF_A_PACK/NUM_OF_PLAYERS];
int i;
int j;
int k;
int temp;
long cardUsedNum = 0;
int packOfCard = 0;
int playerNo = 0;
int playerCardNo = 0;
Card_t tempCard = {0};
int CartCount = 0;
Card_t *pCard = *pInCard;
int run = 1;
int cCount[NUM_OF_PLAYERS];
int hCount[NUM_OF_PLAYERS];
int dCount[NUM_OF_PLAYERS];
int sCount[NUM_OF_PLAYERS];

char c[NUM_OF_PLAYERS][CARD_NUM_OF_A_PACK/NUM_OF_PLAYERS];
char h[NUM_OF_PLAYERS][CARD_NUM_OF_A_PACK/NUM_OF_PLAYERS];
char d[NUM_OF_PLAYERS][CARD_NUM_OF_A_PACK/NUM_OF_PLAYERS];
char s[NUM_OF_PLAYERS][CARD_NUM_OF_A_PACK/NUM_OF_PLAYERS];

CartCount = CARD_NUM_OF_A_PACK;
memset(players,0,sizeof(players));
memset(c,0,sizeof(c));
memset(h,0,sizeof(h));
memset(d,0,sizeof(d));
memset(s,0,sizeof(s));

if (NULL == pCard)
{
return;
}

srand((int)time(0));

while(run)
{
temp = (int)(CartCount*rand()/(RAND_MAX+1.0));

players[playerNo][playerCardNo].color = pCard[temp].color;
players[playerNo][playerCardNo].value = pCard[temp].value;

pCard[temp].color = pCard[CartCount-1].color;
pCard[temp].value = pCard[CartCount-1].value;

pCard[CartCount-1].color = players[playerNo][playerCardNo].color;
pCard[CartCount-1].value = players[playerNo][playerCardNo].value;

CartCount-=1;
if (CartCount < 0)
{
packOfCard++;
if(packOfCard >= 1)
{
run = 0;
}
CartCount = CARD_NUM_OF_A_PACK;
}

playerCardNo+=1;
if (playerCardNo >= NUM_ONEPACK_OF_PLAYER)
{
playerNo+=1;
playerCardNo = 0;
}
}

for(i = 0;i < NUM_OF_PLAYERS;i++)
{
sCount[i] = 0;
hCount[i] = 0;
dCount[i] = 0;
cCount[i] = 0;
for (j = 0;j < NUM_ONEPACK_OF_PLAYER;j++)
{
if ('S' == players[i][j].color)
{
s[i][sCount[i]] = players[i][j].value;
sCount[i]++;
}
else if ('H' == players[i][j].color)
{
h[i][hCount[i]] = players[i][j].value;
hCount[i]++;
}
else if ('D' == players[i][j].color)
{
d[i][dCount[i]] = players[i][j].value;
dCount[i]++;
}
else if ('C' == players[i][j].color)
{
c[i][cCount[i]] = players[i][j].value;
cCount[i]++;
}
}
}

for (i = 0;i < NUM_OF_PLAYERS;i++)
{
for (j = 0;j < cCount[i] ;j++)
{
for(k = 1;k < cCount[i]-j;k++)
{
if(c[i][j] > c[i][k])
{
temp = c[i][j];
c[i][j] = c[i][k];
c[i][k] = temp;
}
}
}
}

for (i = 0;i < NUM_OF_PLAYERS;i++)
{
for (j = 0;j < hCount[i] ;j++)
{
for(k = 1;k < hCount[i] -j;k++)
{
if(h[i][j] > h[i][k])
{
temp = h[i][j];
h[i][j] = h[i][k];
h[i][k] = temp;
}
}
}
}

for (i = 0;i < NUM_OF_PLAYERS;i++)
{
for (j = 0;j < dCount[i] ;j++)
{
for(k = 1;k < dCount[i] -j;k++)
{
if(d[i][j] > d[i][k])
{
temp = d[i][j];
d[i][j] = d[i][k];
d[i][k] = temp;
}
}
}
}

for (i = 0;i < NUM_OF_PLAYERS;i++)
{
for (j = 0;j < sCount[i] ;j++)
{
for(k = 1;k < sCount[i] - j;k++)
{
if(h[i][j] > h[i][k])
{
temp = s[i][j];
s[i][j] = s[i][k];
s[i][k] = temp;
}
}
}
}

for (i = 0;i < NUM_OF_PLAYERS;i++)
{
printf("Player:%d\n",i+1);
printf("S:");
for (j = 0;j < sCount[i];j++)
{
if (s[i][j] <= 10)
printf("%d ",s[i][j]);
else
printf("%c ",s[i][j]);
}
printf("\nH:");
for (j = 0;j < hCount[i];j++)
{
if (h[i][j] <= 10)
printf("%d ",h[i][j]);
else
printf("%c ",h[i][j]);
}
printf("\nD:");
for (j = 0;j < dCount[i];j++)
{
if (d[i][j] <= 10)
printf("%d ",d[i][j]);
else
printf("%c ",d[i][j]);
}
printf("\nC:");
for (j = 0;j < cCount[i];j++)
{
if (c[i][j] <= 10)
printf("%d ",c[i][j]);
else
printf("%c ",c[i][j]);
}

printf("\n");
}
}

int main()
{
Card_t *pCard = NULL;

pCard = (Card_t *)malloc(SIZE);
if (NULL == pCard)
{
printf("error");
return;
}

CardInit(&pCard);

Deal(&pCard);

free(pCard);

}

很强很难做

貌似不会!

10分 ... 有谁会愿意回答 哦 ?

升级是什么哦 是QQ游戏的拖拉机吗 不是一共108张牌 每人25张吗 ?


一道c语言的计算题。求细致一点的讲解~~~追加!!
这是一道比较基础的 C 语言计算题目,可以通过输入两个整数,然后使用加、减、乘、除等运算符进行计算,最后输出结果。下面是一份示例代码,给你参考:include <stdio.h> int main() {int x, y;printf("请输入两个整数:\\n");scanf("%d %d", &x, &y);int sum = x + y;int difference...

一道关于C语言的编程题目: 写出一个有关阴影部分计算的程序,阴影部分的...
include<cstdio>int main(){double r1,r2;double PI=3.1416;\/\/定义 兀 值。scanf("%lf%lf",&r1,&r2);\/\/输入半径。double s1=r1*r1*PI;\/\/大圆面积、double s2=r2*r2*PI;\/\/小圆面积。printf("%.2lf\\n",s1-s2);\/\/输出阴影部分面积。return 0;\/\/望采纳、} ...

一道C语言数组的题目。求指点
(1) 编写函数void find_odd(int odd[],int n),其功能是找到n个连续奇数,满足n的立方等于这些连续奇数之和,将这些奇数依次存放在数组odd中。(2) 编写main函数,定义变量n和一维数组a,从键盘上读入n的值(本题测试数据n=14),用a和n作为实在参数调用函数find_odd,按如下格式将调用结果输出到屏幕上:14^3=a1+...

一道简单的c语言题目
c 是第 3 名 !d 是第 3 名 !不要觉得奇怪,他们并列第三是有可能的,因为题中没有说明比赛只有他们四人参加!!不知给你这样的大幅,不知你明不明白,你最好自己上机运行一下,不懂再找我,还有,我对你说声sorry,其实我昨天就看到你的信息了,不过我咱天没空给你答复,不好意思!我后来...

4道C语言的基础题目,麻烦各位知友帮个忙,刚开始学C
一、printf("%c",*a[i]);表示输出地址a[i]所在的字符,如果你想输出字符串,就必须改成printf("%s",a[i]);或者是puts(a[i]);二、你的代码中指针p是指向a[4]的地址,而输出语句中,是输出指针p的数据,所以输出的是a[4]以后的数据,也就是456789。如果你想输出0~9,那么就要把指针p...

一道C语言的编程题,兔子洞的问题。
int main(){ \/\/Hole表示20个三洞 ,Hole【21】是为了数组下标从1开始,方便对题目的理解 \/\/初始化为0,表示还没有被 灰狼搜索 int Hole[21] = {0};int i = 1,j;\/\/进行15次循环,表示灰狼搜索了15次 for(j = 1; j <= 15; j++){ Hole[i] = 1; \/\/将洞i设为1,表示编号为...

三道c语言的程序题要求要步骤全、最好把思路写上 先上200分在线等_百 ...
第一题很简单,没啥好说的,就是输入数字,然后一个简单的 switch case 语句。include <stdio.h> int main(){ int a, b, opr;printf("输入两个数字,如 3 5 (数字用空格分开)\\n");scanf("%d %d", &a, &b);printf("选择计算方式:\\n");printf("1. 加, 2. 减, 3. 乘, ...

一道关于C语言的题目:编写程序,把键盘输入的字符串中的数字字符删除,然 ...
把不是数字字符“自己向自己拷贝”即可。举例代码如下:\/\/#include "stdafx.h"\/\/If the vc++6.0, with this line.#include "stdio.h"int main(void){char str[500]; int i,j; printf("Input a string...\\nstr="); scanf("%s",str); for(j=i=0;str[i];i++) ...

一个C语言的编程题目,请高手帮忙!谢谢!
\/*第一题:从键盘输入任意两个正整数x和y,编程求出两数的最大公因子和最小公倍数 \/ include <stdio.h> int main(void){ unsigned int x,y,i,a,b;printf("请输入两个正整数x和y:");scanf("%d %d", &x,&y);if (x < 2 || y < 2) { printf("无效的输入\\n");return 0;}...

一道C语言2级题目,要求编写一个函数void fun(char *tt,int pp...
26个字母,pp只需26个元素即可,for (k=0;k<=26;k++)(pp+k)=0;0到26,是总共27个元素,已经超出了主函数中传递过来的数组的范围了。另外,*(pp+k)++; 修改为 (*(pp+k))++;记住:*(p)++ 等价于 *(p++) 等价于 *p;p++;...

习水县13287219393: 很简单的一个C语言题目,速度来解决. -
资孟小儿: #include #include int main() { char buf[128]; while(1){ scanf("%s",buf); if(strcmp(buf,"Quit")==0||strcmp(buf,"Exit")==0){ printf("Good bye!\n"); break; } printf("%s:\n",buf); }/* system("PAUSE");*/ return 0; }

习水县13287219393: 求助:一道C语言程序的题,急!初学还不怎么会,谢谢,多给分 -
资孟小儿: main(){ int a[10],b[10],c[10]; int i; int *p; printf("please input a[10]:\n"); p=a; for(i=0;i<10;i++) scanf("%d...

习水县13287219393: 在线求一道C语言题目 很急很急!!! -
资孟小儿: #include "stdafx.h"#include #include void sort(int *alist, int n){ int i,j,k; i = n-1; while(i>0) { k = 0; for(j=0; j...

习水县13287219393: 一道c语言题目,急 -
资孟小儿: main() { int score,n=0,max=0,min=999,sum=0; int a=0,b=0,c=0; float av; printf(“请输入若干成绩,-1结束:\n”); while(1) { scanf(“%d”,&score); if(score==-1)break;++n; if(score max)max=score; sum+=score; score/=10; swich(score) { case 10:; ...

习水县13287219393: 一道很简单的C语言小题,请在今晚8点前给出答案 速度快者有加分 -
资孟小儿: 既然你对C语言知之甚少,就直接把这两个函数给你朋友看吧!如果他懂C语言,一定会明白并且满意!输入输出部分与程序意图和主函数有关,而且十分简单.你朋友一定知道输入输出这么简单的操作的.********************************************...

习水县13287219393: 帮我做个C语言编程题 速度哇 谢了... -
资孟小儿: int total,first,today; //记录总共、第一天以及当天 total = 0; first = 2; today =first; while(1){if(today<=100){today *= 2;total += today;}else break; } total += 2; // 执行到这里,total就是总共买的了.

习水县13287219393: C语言编程题目 速度解答 -
资孟小儿: scanf("%d",&n); for(n;n>0;n--) { int a=n while(a>0) { printf("*"); if( a-- == 1); printf("\n"); } } 采纳答案继续追问1 小时前lhs636363 大致写一下 cin>>n; int i, j; for(j=n;j>0;j--) { for(i=0;i<j;i++) { cout<<" * “; } cout<<endl; } 采纳答案继续追问1 ...

习水县13287219393: C语言题目、求解答、速度
资孟小儿: #include <stdio.h> int main() {unsigned int a[8],i,j,n = 8;int x;for(i = 0;i < 8;i++)scanf("%u",&a[i]);do{scanf("%d",&x);for(i = 0;i < n;i++){if(x == a[i]) /* 如果在a数组中找到了x就删除这个元素{for(j = i + 1;j < n;j++)a[j - 1] = a[j];n--;}}} ...

习水县13287219393: 菜鸟求助:一道很简单的C编程题 -
资孟小儿: 这样是可以的,形式是输入一个数跟着输出绝对值 EOF指的是end of file.是一个特定的标记 #include <stdio.h> main() { float a; while(scanf("%f",&a)!=EOF) //这个语句的意思就是用a来接收输入的数 //并以Ctrl+z结束整个程序 { if (a<0) a=-a; ...

习水县13287219393: 求一道C语言的题 -
资孟小儿: #include int main(){ int a[3][3],max[3]; int i,j,big; for(i=0;i<3;i++) { big=0; for(j=0;j<3;j++) { scanf("%d",...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网