原有N套扑克牌,因天长日久均已张数不全。现把它们合在一起,看是否能凑成M(M<N)套完整的扑克牌(不用考虑大小王)。
输入(请使用标准输入、输入,不要读写文件)
输入数据的第一行是一个数字N,(1≤N≤20),表示原有N付牌。从第二行起,每4行用于描述一付牌的不同花色(固定为黑红草方的顺序)的现有张数(各行的第一位数)和牌号I(1≤I≤13)(各行的其余的数字,无序)。
输出(请使用标准输入、输入,不要读写文件)
输出只有一行,即为你所能拼凑的扑克牌套数。
样例输入 |
样例输出 |
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 );
}