题目链接
题目描述
话说猴王的徒弟小猴在他的辅导下修炼成仙,然而小猴仍在继续努力修炼中,现在的水平已超过猴王(这似乎不符合常理……) 但小猴绝不是白眼狼,不会凭着自己高强的法力与猴王斗争,反而满怀报恩的思想,他一直等待着机会的降临……
终于一天,一位强大的妖魔趁小猴外出的时候,夺走了猴王(一是因为他法力不够,二是因为他已经衰老),将猴王关进了妖洞,小猴回来得知后决定去营救师父。来到师父所在的妖洞外,发现妖洞安装了带有数字密码盘电子门。小猴略显神通,用魔法得知了此门的密码,是一个由字母组成的字符串,可是密码盘上只能输入数字啊,后经小猴再次魔法得知,妖魔有一套转换规则,将这个字符串中的大写字母提取出来,按照密码字典中字母和数字的对照表,将这些大写字母对应密码字典中的数字求和,将求和的结果作为密码。妖魔这套密码转换不算复杂吧?请你编写一个程序帮助小猴将他得到的字母串转换成能够打开妖洞的密码吧!
输入
输入第一行只有一个正整数N ,表示密码字符串中可能出现的不同大写字母的个数,其中(1≤N≤26)。
之后的 2N 行:表示密码字典,每两行代表一个大写字母的信息:其中第一行为一个大写字母,第二行为这个大写字母对应的正整数(不大于10001000 )。
最后一行:是密码(一个只含有字母的字符串,其长度不超过 3030 )。
输出
输出只含有一个自然数表示开门的密码(小于 3000030000 )。
样例输入
代码语言:javascript复制3
A
20
C
10
E
111
abAcEmnCAA
输出
代码语言:javascript复制181
思路分析
对于题目的要求,先输入一个大写字母,在输入一个整型来代表它的值,如果统一用字符串类型存储到一个数组里,后面要调用的话还要涉及到类型转换的问题,非常麻烦,但如果分别存储到对应类型的数组里,这样两数组同一个下标代表字母和权值就比较方便。
之后我们分别遍历密码串和我们所输入的大写字母数组,如果相等就累加整型数组里对应下标的值,最后返回即可。
整体流程
1.定义大写字符数组str、权值数组num、输入数N、还有一个用来记录总和变量ret。
2.循环同时向两个数组里放值
3.输入密码串letter
4.遍历str和letter,相等则将num对应下标的值累加到ret中,最后返回ret。
完整代码
代码语言:javascript复制#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
//创建相关变量和数组
int N;
int ret = 0;
int num[100] = { 0 };
char str[100];
char letter[30];
scanf("%dn", &N);
for (int i = 0; i < N; i )
{
scanf("%cn", &str[i]);
scanf("%dn", &num[i]);
}
//输入密码条
scanf("%s", letter);
for (int i = 0; i < sizeof(str); i )
{
for (int j = 0; j < sizeof(letter); j )
{
if (str[i] == letter[j])
{
ret = num[i];
}
}
}
printf("%dn", ret);
return 0;
}