hx麻将(C语言)


题目描述

最近hx073269沉迷日本麻将,但hx073269觉得日本麻将的算点太过困难,所以hx073269发明了一种全新的麻将,名为hx麻将。
hx麻将供四人游玩,每一次只进行八局,在第八局结束之后根据四人的点数来决定每个人的名次。
这天hx073269又开始打hx麻将了,由于hx073269脸太黑,又不想输给他的小伙伴们,擅长出千的hx073269拿出了他的遥控麻将,导致从第二局到第八局一直在赢。
现在已知在第一局时hx073269的方位(东/南/西/北),第一局结束的时候四个人的点数,hx073269七局得点的番数x(5≤x≤100),问在第八局结束的时候四个人的点数。

hx麻将规则:
麻将桌是一个正方形,每一个人都坐在一个正方形的一个边上,正方形的每个边上都刻有一个方位。
每条边的方位按逆时针顺序是:东、南、西、北、东、南、西、北(即,若自己是南,则从自己开始逆时针数过去第一个人是西)。
在每一局结束的时候正方形按逆时针方向旋转(即,若这一局自己是南,下一局自己是东)。
自己所在边的方位为东的时候算作庄家。
规则为无击飞,即有人分数变为负分后继续游戏。

点数计算:
作为非庄家得点时:

除了得点者以外,非庄家失去点数为得点者所得点数 / 4,庄家的失去点数为非庄家的失去点数的两倍。
作为庄家得点时:
得点为非庄家得点时的 1.5 倍。
除了得点者以外,每一个人的失去点数为得点者所得点数 / 3。

输入

第一行一个大写字母 C,表示第一局时hx073269所在的方位。
C=E,则为东。
C=S,则为南。
C=W,则为西。
C=N,则为北。
接下来一行四个整数A,B,C,D(0≤A,B,C,D≤100000) 表示四个人在第一局结束时的点数,顺序为从hx073269开始逆时针输入。
接下来一行七个整数xi(5≤xi≤100) 表示从第二局到第八局 hx073269的赢点番数。

输出

一行四个整数,表示第八局结束后四个人的点数,顺序为从hx073269开始逆时针方向输出。

样例输入 Copy

E
25000 25000 25000 25000
5 5 5 5 5 5 5

样例输出 Copy

85000 5000 5000 5000

源码

如下:

#include <stdio.h>
#include <stdlib.h>


int main(int argc, char *argv[]) {
	char pos;
	int a,b,c,d,i;
	int g[7];
	scanf("%c",&pos);
	scanf("%d,%d,%d,%d",&a,&b,&c,&d);
	scanf("%d,%d,%d,%d,%d,%d,%d",&g[0],&g[1],&g[2],&g[3],&g[4],&g[5],&g[6]);
	switch(pos){
		case('E'): pos='N';
		break;
		case('N'): pos='W';
		break;
		case('W'): pos='S';
		break;
		case('S'): pos='E';
		break;
	} 
	for(i=0;i<7;i++){
		if(pos=='E'){
			switch(g[i]){
			case 5:a+=12000,b-=4000,c-=4000,d-=4000;
			break;
			case 6:case 7:a+=18000,b-=6000,c-=6000,d-=6000;
			break;
			case 8:case 9: case 10:a+=24000,b-=8000,c-=8000,d-=8000;break;
			case 11:case 12:a+=36000,b-=12000,c-=12000,d-=12000;
			break;
			default:a+=48000,b-=16000,c-=16000,d-=16000;
			break;
		    }
			pos='N';
		}
			

			else if(pos=='N'){
			switch(g[i]){
			case 5:a+=8000,b-=4000,c-=2000,d-=2000;
			break;
			case 6:case 7:a+=12000,b-=6000,c-=3000,d-=3000;
			break;
			case 8:case 9:case 10:a+=16000,b-=8000,c-=4000,d-=4000;break;
			case 11:case 12:a+=24000,b-=12000,c-=6000,d-=6000;
			break;
			default:a+=32000,b-=16000,c-=8000,d-=8000;
			break;
			}
			pos='W';
		}
		


		else if(pos=='W'){
			switch(g[i]){
			case 5:a+=8000,b-=2000,c-=4000,d-=2000;
			break;
			case 6:case 7:a+=12000,b-=3000,c-=6000,d-=3000;
			break;
			case 8:case 9:case 10:a+=16000,b-=4000,c-=8000,d-=4000;
			break;
			case 11:case 12:a+=24000,b-=6000,c-=12000,d-=6000;
			break;
			default:a+=32000,b-=8000,c-=16000,d-=8000;
			break;
			}
			pos='S';
		}
		

		else if(pos=='S'){
			switch(g[i]){
			case 5:a+=8000,b-=2000,c-=2000,d-=4000;
			break;
			case 6:case 7:a+=12000,b-=3000,c-=3000,d-=6000;
			break;
			case 8:case 9:case 10:a+=16000,b-=4000,c-=4000,d-=8000;
			break;
			case 11:case 12:a+=24000,b-=6000,c-=6000,d-=12000;
			break;
			default:a+=32000,b-=8000,c-=8000,d-=16000;
			break;
			}
			pos='E';
		}
	}
	printf("%d,%d,%d,%d",a,b,c,d);
	return 0;
}

thanks for scanning

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值