c语言hs
1. 如何求C语言扑克牌洗牌发牌,发的牌要从大到小排序,每个部分都要用
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 52 //牌张总数
#define M 13 //每花色张数
char hs[4]={5,4,3,6}; //花色数组:梅花、红心、方块、黑桃字符对应的ASCII码
char hx[]={"JQKA"}; // 对应11,12,13,14共四张大于10的牌符号
//生成顺序扑克牌数组: 1~52,梅花1~13,红心14~26,方块27~39,黑桃40~52
void newDeck(int *a) { int i; for ( i=0;i<N;i++ ) a[i]=i+1; }
//洗牌,将花色和顺序打乱
void Shuffle(int *a) { int s,i,j,t;
srand((unsigned int)time(NULL)); //利用当前时间生成随机数种子
s=rand()%11+5; printf("随机洗牌%d遍\n",s); //第1个随机数当成洗牌次数, 洗牌次数大于等于5,小于等于15
for ( i=0;i<s;i++ ) {
for ( j=0;j<N;j++ ) {
s=rand()%52; //随机数范围0~51,对应a数组下标
t=a[j]; a[j]=a[s]; a[s]=t; //第j张牌和第s张牌交换
}
}
}
//发牌并显示
void Deal(int a[N],int b[4][M]) { int i,j;
for ( i=0;i<4;i++ ) for ( j=0;j<M;j++ ) b[i][j]=a[i*M+j];
}
//理牌
void Collating(int a[4][M]) { int i,j,k,h;
for ( h=0;h<4;h++ )
for ( i=0;i<M-1;i++ )
for ( j=i+1;j<M;j++ )
if ( a[h][i]<a[h][j] ) {
k=a[h][i]; a[h][i]=a[h][j]; a[h][j]=k;
}
}
//显示
void Display(int a[4][M]) { int i,j,s;
for ( i=0;i<4;i++ ) {
for ( j=0;j<M;j++ ) {
s=a[i][j]-1; printf("%c",hs[s/M]);
s%=M; if ( s<9 ) printf("%d ",s+2); else printf("%c ",hx[s-9]);
}
printf("\n");
}
}
void main() { int Deck[N],hands[4][M];
newDeck(Deck); //新扑克牌
Shuffle(Deck); //洗牌
Deal(Deck,hands); //发牌
Collating(hands); //理牌
Display(hands); //显示
printf("\n\n"); system("pause");
}
2. C语言 求去除最高分和最低分然后求平均分
#include <stdio.h>
#include <stdlib.h>
#define N 10
int main(void)
{
int n,i,j,max,min; //全都是计数器作用
float a[N][7],average[N];//一个存得分,一个存平均值
printf("Please input the number of player(s):");
scanf("%d",&n);
if(N < n) //不能用n定义数组长度,这里折中,如果n>N则失败,N可以适当增大
{
printf("Illege input!");
exit(0);
}
printf("Please input the grades of players:
");//记录得分
for(i = 0;i < n;i++)
for(j = 0;j < 7;j++)
scanf("%f",&a[i][j]);
for(i = 0;i < n;i++,a[i][max] = 0,a[i][min] = 0)//实现“去掉最高最低分”
for(j = 0,max = 0,min = 0;j < 7;j++)
{
if(a[i][j] > a[i][max])
max = j;
else if(a[i][j] < a[i][min])
min = j;
}
for(i = 0;i < n;i++)//计算平均分
for(j = 0;j < 7;j++)
average[i] += a[i][j];
for(i = 0,max = 0;i < n;i++) //比较各选手得分
{
if(average[i] > average[max])
max = i;
}
printf("The winner is:%d
",max+1);//输出
return 0;
}
附测试图: