POJ_3766_Hexagon Coin Toss

/*
将六边形的顶点分为三类,即分别与一个、两个、三个六边形相邻。
过六边形的中心,做各边的垂线,可将六边形等分成六份。
其中每一份中,硬币落在其上的三种概率,仅与其顶点类型相关。
1、	首先求出每种顶点对应的三种概率的值。
2、	再算出每种顶点的个数。
3、	将顶点的个数作为权,求出加权概率即得解。
*/

#include<iostream>
#include<cstdio>
using namespace std;

#define MAX_N 1000
#define MAX_M 1000

#define SQRT3 1.7320508075688772935274463415059//根号3
#define AREA (3*SQRT3/2)//六边形面积
#define PI 3.1415926535897932384626433832795

int main() {
	int N, M, K;
	long double R;
	long double area1_1, area2_1, area2_2, area3_1, area3_2, area3_3;//不同类型顶点对应不同落点的面积
	long double area, area1, area2, area3;//总面积
	int point1, point2, point3;//不同类型顶点的个数
	int count;//六边形个数
	int T = 1;
	while (cin >> N >> M >> K) {
		if (N == 0 && M == 0 && K == 0) break;
		cin >> R;
		//与一个六边形相邻的顶点
		area1_1 = AREA / 6;//落在一个六边形上		
		//与两个六边形相邻的顶点
		area2_2 = (R*PI / 6 + 1)*R / 2;//落在两个六边形上
		area2_1 = AREA / 6 - area2_2;//落在一个六边形上
		//与三个六边形相邻的顶点
		area3_3 = R*R*(PI / 6 + 1 / SQRT3);//落在三个六边形上
		area3_1 = (0.5 - R / SQRT3)*(SQRT3 / 2 - R);//落在一个六边形上
		area3_2 = AREA / 6 - area3_1 - area3_3;//落在两个六边形上

		point3 = (2 * N - 3)*(M - 1);
		if (M % 2 == 0) {//偶数行
			point1 = (N + M + 1) * 2 - 1;
			point2 = (N + M - 2) * 2 - 1;
		}
		else {//奇数行
			point1 = (K + M + 1) * 2;
			point2 = (K + M - 2) * 2;
		}

		count = N*M - M / 2;
		if (K < N && M % 2 == 1) count--;

		area = count*AREA;
		area1 = point1*area1_1 + point2*area2_1 * 2 + point3*area3_1 * 3;
		area2 = point2*area2_2 * 2 + point3*area3_2 * 3;
		area3 = point3*area3_3 * 3;

		printf("Case %d:\n", T++);
		printf("Probability of covering 1 hexagon   = %.3llf percent.\n", area1 / area * 100);
		printf("Probability of covering 2 hexagons  = %.3llf percent.\n", area2 / area * 100);
		printf("Probability of covering 3 hexagons  = %.3llf percent.\n", area3 / area * 100);
		printf("\n");
	}

	return 0;
}

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值