完整的扑克牌

 

原有N套扑克牌,因天长日久均已张数不全。现把它们合在一起,看是否能凑成MM<N)套完整的扑克牌(不用考虑大小王)。

 

输入(请使用标准输入、输入,不要读写文件)

输入数据的第一行是一个数字N(1N20),表示原有N付牌。从第二行起,每4行用于描述一付牌的不同花色(固定为黑红草方的顺序)的现有张数(各行的第一位数)和牌号I1I13)(各行的其余的数字,无序)。

 

输出(请使用标准输入、输入,不要读写文件)

输出只有一行,即为你所能拼凑的扑克牌套数。

 

样例输入

样例输出

2

7  1  2  4  5  7  9  10

10  1  2  4  3  11  12  13  6  8  7

6  3  5  10  11  6  4

8  5  6  4  2  8  9  7  12

7  11  3  6  8  7  12  13

7  5  3  6  9  7  10  13

8  13  1  4  2  8  9  7  12

10  1  2  4  3  11  12  13  6  10  7

1

 

 

 

 

#include<stdio.h>

#include<math.h>

void main()

{

  //红桃:heart  黑桃:spade  梅花:club 方块:diamond  

  int min=20; //最多20幅牌

  int mins[4]={20,20,20,20}; //记录花色中最少的一张牌的张数

  int iHeartSize[13],iSpadeSize[13],iClubSize[13],iDiamondSize[13];//记录红黑梅方13张的情况,各有多少张

  int iHeart[20][13],iSpade[20][13],iClub[20][13],iDiamond[20][13];//记录红黑梅方20付牌13张的情况

  int iHeartCount = 0, iSpadeCount = 0 , iClubCount = 0 , iDiamondCount = 0;  //记录每次输入的每付牌的各种花色的张数

  int i = 0 , j = 0 , k = 0 , n =0 ;

  //数组初始化

  for( i = 0 ; i < 13 ; i++ )

  {

       iHeartSize[i] = iSpadeSize[i] = iClubSize[i] = iDiamondSize[i] = 0;

  }

 

  for( i = 0 ; i < 20 ; i++ )

  {

       for( j = 0 ; j < 13 ; j++ )

       {

              iHeart[i][j]   = 0;

              iSpade[i][j]   = 0;

              iClub[i][j]    = 0;

              iDiamond[i][j] = 0;

       }

  }

      

 

  do

  {

       printf("请输入牌的付数n(n<=20):/n");

      scanf("%d",&n);

  } while (  n > 20 || n < 1 );

 

 

  for( i = 0 ; i < n ; i++ )

  {

       scanf( "%d" , &iHeartCount );

      for( j = 0 ; j < iHeartCount ; j++ )

       {

           scanf("%d",&iHeart[i][j]);

       }

   

      scanf( "%d" , &iSpadeCount );

      for( j = 0 ; j < iSpadeCount ; j++ )

       {

              scanf("%d",&iSpade[i][j]);

       }

  

      scanf( "%d" , &iClubCount );

      for( j = 0 ; j < iClubCount ; j++ )

       {

           scanf("%d",&iClub[i][j]);

       }

 

      scanf( "%d" , &iDiamondCount );

      for( j = 0 ; j < iDiamondCount ; j++ )

       {

            scanf("%d",&iDiamond[i][j]);

       }

 

  }

 

 

  for( i = 0 ; i < n ; i++ )  //付数

  {

      for( j = 0 ; j < 13 ; j++ )//张数

       {

              for( k = 1; k <= 13 ; k++)//每张的号码

              {

                     if( iHeart[i][j] == k )

                     {

                            iHeartSize[k-1]++;

                     }

                  if( iSpade[i][j] == k )

                     {

                            iSpadeSize[k-1]++;

                     }

                  if( iClub[i][j] == k  )

                     {

                            iClubSize[k-1]++;

                     }

                  if( iDiamond[i][j] == k)

                     {

                            iDiamondSize[k-1]++;

                     }

              }

       }

      

  }

 

  for( i = 0 ; i < 13 ; i++ ) //计算每种花色每个牌号的最小张数      

  {

       if( iHeartSize[i] < mins[0] )

       {

              mins[0] = iHeartSize[i];

       }

 

      if( iSpadeSize[i] < mins[1] )

       {

              mins[1] = iSpadeSize[i];

       }

 

      if( iClubSize[i] < mins[2] )

       {

              mins[2] = iClubSize[i];

       }

 

      if( iDiamondSize[i] < mins[3] )

       {

              mins[3] = iDiamondSize[i];

       }

  }

 

 

  for( i = 0 ; i < 4 ; i++ )

  {

       if( mins[i] < min )

       {

              min = mins[i];

       }

  }

 

  printf( "%d/n", min );

      

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以为您提供一个完整的Java扑克牌游戏的实现。以下是完整的代码: ```java import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner; public class PokerGame { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("欢迎来到扑克牌游戏!"); System.out.print("请输入玩家1的姓名:"); String player1Name = scanner.nextLine(); System.out.print("请输入玩家2的姓名:"); String player2Name = scanner.nextLine(); System.out.println("游戏开始!"); List<Card> deck = createDeck(); shuffleDeck(deck); List<Card> player1Hand = new ArrayList<>(); List<Card> player2Hand = new ArrayList<>(); dealCards(deck, player1Hand, player2Hand); System.out.println(player1Name + "的手牌:"); displayCards(player1Hand); System.out.println("\n" + player2Name + "的手牌:"); displayCards(player2Hand); int player1Score = calculateHandValue(player1Hand); int player2Score = calculateHandValue(player2Hand); System.out.println("\n" + player1Name + "的手牌总点数:" + player1Score); System.out.println(player2Name + "的手牌总点数:" + player2Score); if (player1Score > player2Score) { System.out.println("\n" + player1Name + "获胜!"); } else if (player1Score < player2Score) { System.out.println("\n" + player2Name + "获胜!"); } else { System.out.println("\n双方平局!"); } } public static List<Card> createDeck() { List<Card> deck = new ArrayList<>(); for (Suit suit : Suit.values()) { for (Rank rank : Rank.values()) { deck.add(new Card(suit, rank)); } } return deck; } public static void shuffleDeck(List<Card> deck) { Collections.shuffle(deck); } public static void dealCards(List<Card> deck, List<Card> player1Hand, List<Card> player2Hand) { for (int i = 0; i < deck.size(); i++) { Card card = deck.get(i); if (i % 2 == 0) { player1Hand.add(card); } else { player2Hand.add(card); } } } public static void displayCards(List<Card> hand) { for (Card card : hand) { System.out.print(card + " "); } } public static int calculateHandValue(List<Card> hand) { int totalValue = 0; for (Card card : hand) { totalValue += card.getRank().getValue(); } return totalValue; } } enum Suit { HEARTS, DIAMONDS, CLUBS, SPADES } enum Rank { TWO(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8), NINE(9), TEN(10), JACK(10), QUEEN(10), KING(10), ACE(11); private int value; Rank(int value) { this.value = value; } public int getValue() { return value; } } class Card { private Suit suit; private Rank rank; public Card(Suit suit, Rank rank) { this.suit = suit; this.rank = rank; } public Suit getSuit() { return suit; } public void setSuit(Suit suit) { this.suit = suit; } public Rank getRank() { return rank; } public void setRank(Rank rank) { this.rank = rank; } @Override public String toString() { return rank + " of " + suit; } } ``` 这个程序可以实现一个简单的两个玩家的扑克牌游戏。在游戏开始时,程序会要求输入两个玩家的姓名,然后创建一扑克牌,洗牌并将牌发给两个玩家。接下来,程序会计算每个玩家手中的牌的大小,并比较它们的大小。最后,程序会展示胜者或平局。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值