|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int a[52],i,w,t;
void judge(int p[]);//定义判断函数
srand((unsigned)time(NULL));//定义排序函数
for (i=0;i<52;i++)//填满数组
a[i]=i+1;
for (i=52-1;i>0;i--)//通过随机函数赋值给w,然后通过交换下标来保证随机的效果
{
w=rand()%i;//运用随机函数来给w赋值
t=a[i];
a[i]=a[w];//交换下标
a[w]=t;
}
printf("玩家1的手牌有:");
judge(a);
printf("\n玩家2的手牌有:");
judge(a+13);
printf("\n玩家3的手牌有:");
judge(a+26);
printf("\n玩家4的手牌有:");
judge(a+39);
printf("\n");
return 0;
}
void judge(int p[])//判断手牌花色
{
int i;
void sorting(int p[],int n);
sorting(p,13);
for(i=0;i<13;i++)
{
if(p[i]<=13&&p[i]>=1)
{
if(p[i] == 1)
printf("方块A ");
else if(p[i] == 11)
printf("方块J ");
else if(p[i] == 12)
printf("方块Q ");
else if(p[i] == 13)
printf("方块K ");
else
printf("方块%d ",p[i]);
}
else if(p[i]<=26&&p[i]>=14)
{
if(p[i]==14)
printf("梅花A ");
else if(p[i]==24)
printf("梅花J ");
else if(p[i]==25)
printf("梅花Q ");
else if(p[i]==26)
printf("梅花K ");
else
printf("梅花%d ",p[i]-13);
}
else if(p[i]<=39&&p[i]>=27)
{
if(p[i]==27)
printf("黑桃A ");
else if(p[i]==37)
printf("黑桃J ");
else if(p[i]==38)
printf("黑桃Q ");
else if(p[i]==39)
printf("黑桃K ");
else
printf("黑桃%d ",p[i]-26);
}
else if(p[i]<=52&&p[i]>=40)
{
if(p[i]==40)
printf("红桃A ");
else if(p[i]==50)
printf("红桃J ");
else if(p[i]==51)
printf("红桃Q ");
else if(p[i]==52)
printf("红桃K ");
else
printf("红桃%d ",p[i]-39);
}
}
}
void sorting(int p[],int n)//排序函数
{
int i,k,j,t;
int z[13];
for(i=0;i<13;i++)//先把数值变为1-13,并记录下所变的数的位置
{
if (p[i]<=13)
{
z[i] = 0;
}
else if(p[i]>13&&p[i]<=26)
{
z[i] = 1;
p[i] = p[i]-13*z[i];
}
else if(p[i]>26&&p[i]<=39)
{
z[i] = 2;
p[i] = p[i]-13*z[i];
}
else if(p[i]>39&&p[i]<=52)
{
z[i] = 3;
p[i] = p[i]-13*z[i];
}
}
for(i=0;i<n-1;i++)//通过数值大小来排序
{
k=i;
for(j=i+1;j<n;j++)
{
if(p[j]<p[k])
k = j;
}
t = p[k];
p[k] = p[i];
p[i] = t;
}
for(i=0;i<13;i++)//通过刚刚记录下的位置来还原数值
{
p[i] = p[i]+13*z[i];
}
}
本帖最后由 superbe 于 2019-12-12 13:23 编辑
问题出在sorting函数,在交换两张牌时,数组z[13]中没有相应交换,导致最后还原时加回发生了“错位”。
把排序的嵌套for循环修改如下:
- for (i = 0; i < n - 1; i++)//通过数值大小来排序
- {
- for (j = i + 1; j < n; j++)
- {
- if (p[j] < p[i]) {
- t = p[i];
- p[i] = p[j];
- p[j] = t;
- t = z[i];
- z[i] = z[j];
- z[j] = t;
- }
- }
- }
复制代码
|
|