皮卡丘的伙伴, 二维数组的加深理解

本文介绍了一场关于皮卡丘及其伙伴们之间的对战训练,包括招式威力计算规则及属性相克等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

皮卡丘的伙伴是?

Time Limit: 1000MS Memory Limit: 65536KB
Problem Description

 

大家知道皮卡丘有很多伙伴吗?他们大多数都是水、火、草三个属性的,也被人称为“御三家”。今天,皮卡丘要和他们进行一次对战的训练,下面我简单的介绍一下对战规则:

宝可梦对战是1对1的战斗,通过宝可梦学习到的招式进行攻击,从而获得胜利。每个招式都有自身的威力,招式的威力与造成的伤害成正比,也就是说招式威力越大,造成的伤害也越大。招式还附带属性,如果宝可梦使用的招式属性与自身属性相同,招式威力会提高50%;如果宝可梦使用的招式属性克制对手的宝可梦属性,招式威力会翻倍;如果对手的宝可梦属性对宝可梦使用的招式属性有抵抗效果,招式威力会减半。

现在皮卡丘和他的伙伴们都只学会了三个招式,第一个招式都是和自身属性相同的招式,第二个招式都是一般属性的招式,第三个招式都是其他属性的招式,且第三个招式威力固定是60。

 

下面是属性相克关系:

Water(水)属性招式克制火属性宝可梦,被草、水属性宝可梦抵抗。

Fire(火)属性招式克制草属性宝可梦,被水、火属性宝可梦抵抗。

Grass(草)属性招式克制水属性宝可梦,被草、火属性宝可梦抵抗。

Electric(电)属性招式克制水属性宝可梦,被草、电属性宝可梦抵抗。     

Normal(一般)属性招式并不克制其他属性的宝可梦,也不被其他属性的宝可梦抵抗。

举例:水属性招式克制火属性宝可梦,招式威力*2;电属性招式被草属性宝可梦抵抗,招式威力*0.5

 

现在请你帮助皮卡丘及他的伙伴,选出在对战中实际威力最大的招式。

Input

输入数据有多组,到EOF结束。

每组数据先输入己方宝可梦属性和对方宝可梦属性(双方的属性一定是水、火、草、电四种属性之一),之后输入两个整数a1,a2(1<=a1,a2<=200),a1代表己方宝可梦第一个招式的威力,a2代表己方宝可梦第二个招式的威力。最后输入一个属性,代表己方宝可梦第三个招式的属性,第三个招式属性保证与己方宝可梦属性不同。

Output

对于每组输入,输出一个整数x,代表造成最大伤害的招式编号。如果存在多个招式的实际威力相同,输出编号最小的招式。

Example Input
Water Grass
110 100 Fire
Electric Electric
90 80 Grass
Grass Water
40 102 Electric
Example Output
3
2
1




// 用了一晚上加一上午写出的代码~注意认真的理解题意,仔细推敲,get 新技能。

01#include<stdio.h>
02#include<string.h>
03int main(void)
04{
05    char s1[10], s2[10], s3[10];
06    char s[4][10] = {"Electric", "Grass", "Water", "Fire"}; // 字符串二维数组的定义!!!
07    double x1, x2, x3, max;
08    int i, a, b, c, m;
09    double t[4][4] = {{0.5, 0.5, 2, 1}, {1, 0.5, 2, 0.5}, {1, 0.5, 0.5, 2}, {1, 2, 0.5, 0.5}}; // 直接来比较己方和对方的招式 产生的结果 在一乘即可。
10                                                                                        //因为在二维数组中有小数点所以用double类型。
11    while(~scanf("%s %s %lf %lf %s", s1, s2, &x1, &x2, s3))
12    {
13        x1 = 1.5 * x1;
14        x3 = 60;
15        for(i = 0; i < 4; i++)
16        {
17            if(strcmp(s1, s[i]) == 0)
18            {
19                a = i;
20            }
21            if(strcmp(s2, s[i]) == 0)
22            {
23                b = i;
24            }
25            if(strcmp(s3, s[i]) == 0)
26            {
27                c = i;
28            }
29        }
30           x1 = x1 * t[a][b];
31           x3 = x3 * t[c][b];
32        max = x1;
33        m = 1;
34        if(x2 > max)
35        {
36            max = x2;
37            m = 2;
38        }
39        if(x3 > max)
40        {
41            max = x3;
42            m = 3;
43        }
44        printf("%d\n", m);
45    }
46    return 0;
47}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值