【数组测试题8】Kqp的礼物(string)

题目描述
mx妹妹要过生日了!作为mx妹妹的好同(peng)学(you),kqp他要送给mx妹妹一样特别的礼物,譬如……项链!
项链由前n种大写字母组成,每种字母都有不同的爱心值。
Mx妹妹已经知道了:
1、组成整个项链的所有字母串;
2、整个项链的爱心值之和m,
3、以及其中的n-1种字母所带有的爱心值a;
她想知道剩下那种字母的爱心值是多少。

输入
第一行只有一个整数n;
第二行一个字母串s表示kqp的项链,长度<=1000;
第2+1~2+n-1行,每行有个大写母c和一个整数a,之前用个空格隔开,表示字母c所带的爱心值为a;
最后一行只有一个整数表示整个项链的爱心值之和m。

输出
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。

代码:

#include<bits/stdc++.h>
using namespace std;
double x,p;
long long n,l,k,a[1000001],t;
char c,s[1001];
int main()
{
    cin>>n;
    cin>>s;
    l=strlen(s)-1;
    for(int i=1;i<n;i++)
    {
        cin>>c>>k;
        a[c-'A']=k;
    }
    cin>>x;
    for(int i=0;i<=l;i++)
    {
        if(a[s[i]-'A']>0)
        x-=a[s[i]-'A'];
        else
        t++;
    }
    p=t;
    cout<<fixed<<setprecision(2)<<x/p;
}

你可以使用C++编程语言来解决这个问题。下面使用C++实现的代码示例: ```cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; // 计算Nimber值 int calculateNimber(int length) { // 如果长度为偶数,Nimber值为0 if (length % 2 == 0) { return 0; } // 如果长度为奇数,Nimber值为1 else { return 1; } } // 判断最终胜利者 string determineWinner(int n, int turn, vector<int>& nums) { // 计算一排数的总长度 int length = nums.size(); // 用于存储每个子游戏的Nimber值 vector<int> nimbers(length, 0); // 计算每个子游戏的Nimber值 for (int i = 0; i < length; i++) { int j = i; while (j < length && nums[i] == nums[j]) { j++; } nimbers[i] = calculateNimber(j - i); i = j - 1; } // 如果先取者的回合数为偶数,则先取者是kqp;否则,先取者是ljj string firstPlayer = (turn % 2 == 0) ? "kqp" : "ljj"; // 计算最终胜利者 int nimSum = 0; for (int nimber : nimbers) { nimSum ^= nimber; } // 如果nimSum为0,则先取者胜利;否则,对手胜利 if (nimSum == 0) { return firstPlayer; } else { return (firstPlayer == "kqp") ? "ljj" : "kqp"; } } int main() { int k; cin >> k; for (int i = 0; i < k; i++) { int n; cin >> n; int turn; cin >> turn; vector<int> nums(n); for (int j = 0; j < n; j++) { cin >> nums[j]; } string winner = determineWinner(n, turn, nums); cout << winner << endl; } return 0; } ``` 你可以将上述代码保存为一个以".cpp"为后缀的文件,然后使用C++编译器编译运行该文件。希望以上代码能够帮助到你!如果你还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值