【题目背景】 mx妹妹要过生日了!作为mx妹妹的好同(peng)学(you),kqp他要送给mx妹妹一样特别的礼物,譬如……项链! 【问题描述】 项链由前n种大写字母组成,每种字母都有不同的爱心值。 Mx妹妹已经知道了: 1、组成整个项链的所有字母串; 2、整个项链的爱心值之和m, 3、以及其中的n-1种字母所带有的爱心值a; 她想知道剩下那种字母的爱心值是多少。 【输入格式】 输入文件名为string.in, 第一行只有一个整数n; 第二行一个字母串s表示kqp的项链,长度<=1000; 第2+1~2+n-1行,每行有个大写母c和一个整数a,之前用个空格隔开,表示字母c所带的爱心值为a; 最后一行只有一个整数表示整个项链的爱心值之和m。 【输出格式】 输出文件名为string.out, Mx妹妹想了解剩下那个字母c带有的爱心值中多少(保留2位小数)。 【输入样例】 8 CEAAGCGDHFB A 5 C 35 D 18 E 42 F 15 G 17 H 21 661 【输出样例】 451.00 【数据范围】 40%的数据,项链长度<=10,并且没有重复字母; 80%的数据,项链长度<=255,有重复字母; 100%的数据,st长度<=1000,有重复字母,n<=26。 【样例说明】 项链的字母串为CEAAGCGDHFB A=5 C=35 D=18 E=42 F=15 G=17 H=21 则原来的字母串为C(35)E(42)A(5)A(5)G(17)C(35)G(17)D(18)H(21)F(15)B(?) 项链总共爱心值=661 661-35-42-5-5-17-35-17-18-21-15=451 未知的B个数为一个,则B=451/1=451.00 |
解题思路:这是一道简单的题目,我们只需要把给出的字母以及他所在的价值和相同的字母替换,然后再用总共的值减去除未知数外的其他数的值,最后除以未知数的个数就可以了。 注意点:读入字符串和后面的字母和数时,需要前后一致,不然运行会出错。 |
废话不多说,上代码。
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;int n,k=0,m=0,d=0;//d表示探测的数是否是未知数,1就是不是,0就是是。
double t=0;
char a[1001];int b[1001],c[1001]={0};
cin>>n;
cin>>s;
for(int i=1;i<=n-1;i++){
scanf("%s%d",&a[i],&b[i]);
}
scanf("%d",&m);
for(int i=0;i<=s.length();i++){//遍历每个字母
d=0;
for(int j=1;j<=n;j++){
if(s[i]==a[j]){//如果有字母相同
m=m-b[j];//减去该字母的值
d=1;break;
}
}
if(d==0)k++;
}
t=m/k;
cout<<fixed<<setprecision(2)<<t;//题目说t需要两位小数。
}