题目描述
给定一个仅包含26个英文字母(大小写不敏感)的字符串,每个字母都有一个对应的权值,而整个字符串的权值就是字符串中每个字母对应权值的总和。请你写个程序求出字符串的权值,简单吧,快来A掉这道题。
输入
第一行一个数字t(0<t<=1000),代表测试数据的组数。
之后t组测试数据,每组测试数据有两行输入,第一行是26个用空格间隔的数字,按照顺序分别代表a-z(大小写不敏感)这26个字母的权值。第二行是一个由英文字母组成的字符串,即待求出权值的字符串。
测试数据保证单个字母对应的权值大于等于0且不超过int型数据范围,单个字符串的长度不超过10000。
输出
对于每组测试数据,请输出字符串的权值。
每个输出占一行。
样例输入
1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 asdklfls
样例输出
84
提示
注意数据范围
思路:
我们用一个数组来存储每一次abc所代表的权值,然后遍历一下字符数组加上相应的权值即可;
#include<stdio.h> #include<string.h> int main() { int n,c; long long int s=0,a[27]; char b[10001]; scanf("%d",&n); for(int i=0; i<n; i++) { for(int k=1; k<=26; k++) { scanf("%lld",&a[k]); } getchar(); gets(b); c=strlen(b); for(int l=0; l<c; l++) { if(b[l]>='a'&&b[l]<='z') { s=s+a[b[l]-'a'+1]; } if(b[l]>='A'&&b[l]<='Z') { s=s+a[b[l]-'A'+1]; } }printf("%lld\n",s);s=0; }return 0; }