我的作业之旅之WEEK6限时模拟

掌握魔法的东东二

题干
题干1题干2题干3思路
分析题意,不难理解,就是从A✖B张牌里拿五张牌出来,求各种不同牌型的数量。
我开始的思路是利用排列组合,把这些牌先按照数字和花色的大小顺序排好(像一个矩阵),然后在固定选取两张牌的情况下,在剩下的牌里选取三张牌。在我自信满满地用CAn编好一套规则之后,Wrong Answer给了我当头一棒,好吧,听说暴力法不会超时(数据限额),那就用暴力法吧。
暴力法就是用两个数组分别存储五张牌的信息,将所有的牌存到一个结构体数组里,在排除掉固定的两张牌之后,遍历不放回地抽取三张牌,放入存储信息的数组,再对两个数组的信息进行判断(按照牌型的优先级判断,高级挑剩下为低级型)得到合适的牌型认定,更新对应牌型数目。
代码

#include<iostream>
#include<algorithm>
using namespace std;
int A,B,n;//数字数和花色数,除去两张牌之后的牌数 
int a1,a2,b1,b2;//开始两张牌数字和花色 
int ji[9];//记录每种牌型的数量
int shu[5],hua[5];//分别存储五张牌的数字和花色 ,用于判断类型 
struct pork{
	int a,b;//单张牌的数字与花色 
}porks[110]; 
void chushi()
{
	//shu[0]=a1;
	//shu[1]=a2;
	//hua[0]=b1;
	//hua[1]=b2;
	for(int i=0;i<9;i++)
	{
		ji[i]=0;
	}
}
void jishu()
{
	for(int i=0;i<n;i++)
	{
		for(int j=i+1;j<n;j++)
		{
			for(int k=j+1;k<n;k++)
			{
				shu[0]=a1;shu[1]=a2;
				hua[0]=b1;hua[1]=b2;
				shu[2]=porks[i].a;hua[2]=porks[i].b;
				shu[3]=porks[j].a;hua[3]=porks[j].b;
				shu[4]=porks[k].a;hua[4]=porks[k].b;
				sort(shu,shu+5);
				if(hua[0]==hua[1]&&hua[0]==hua[2]&&hua[0]==hua[3]&&hua[0]==hua[4])
				{
					if(shu[1]==shu[0]+1&&shu[2]==shu[1]+1&&shu[3]==shu[2]+1&&shu[4]==shu[3]+1)
						ji[0]++;//tonghuashun
					else
						ji[2]++;//tonghua
				}
				else if(shu[1]==shu[0]+1&&shu[2]==shu[1]+1&&shu[3]==shu[2]+1&&shu[4]==shu[3]+1)
					ji[1]++;//shunzi
				else if(shu[0]==shu[1]&&shu[1]==shu[2]&&shu[2]==shu[3]||shu[1]==shu[2]&&shu[2]==shu[3]&&shu[3]==shu[4])
					ji[3]++;//boom
				else if(shu[0]==shu[1]&&shu[1]==shu[2]&&shu[4]==shu[3]||shu[1]==shu[0]&&shu[2]==shu[3]&&shu[3]==shu[4])
					ji[4]++;//san er
				else if(shu[0]==shu[1]&&shu[2]==shu[3]||shu[0]==shu[1]&&shu[3]==shu[4]||shu[1]==shu[2]&&shu[3]==shu[4])
					ji[5]++;//liangdui
				else if(shu[0]==shu[1]&&shu[1]==shu[2]||shu[1]==shu[2]&&shu[2]==shu[3]||shu[2]==shu[3]&&shu[3]==shu[4])
					ji[6]++;//san
				else if(shu[0]==shu[1]||shu[1]==shu[2]||shu[2]==shu[3]||shu[3]==shu[4])
					ji[7]++;//yidui
				else
					ji[8]++;
			}
		}
	}	
}
int main()
{
	scanf("%d%d",&A,&B);
	n=0;
	scanf("%d%d%d%d",&a1,&b1,&a2,&b2); 
	chushi();
	for(int i=0;i<A;i++)
	{
		for(int j=0;j<B;j++)
		{
			if((i==a1&&j==b1)||(i==a2&&j==b2))  
				continue;
			porks[n].a=i;
			porks[n].b=j;
			n++;
		}
	}
	jishu();
	for(int i=0;i<9;i++)
	{
		printf("%d ",ji[i]);
	 } 
	 return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值