鱼C论坛

 找回密码
 立即注册
查看: 1104|回复: 31

求助!这三题要怎么做

[复制链接]
发表于 2024-4-13 19:12:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 张育玮 于 2024-4-13 19:16 编辑

如图

1

1

2

2

3

3

评分

参与人数 1荣誉 -5 鱼币 -5 贡献 -3 收起 理由
sfqxx_小 -5 -5 -3 你扣别人行,但你绝对不能惹我

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-13 19:13:08 | 显示全部楼层
A题要求根据给定的字符串和整数数组,将字符串中的每个字符向前滚动对应的单位,得到一个新的字符串。滚动是循环的,即超出字母表范围的字母会回到字母表的开头。

我们可以使用ASCII码来处理字符的循环滚动。先将字符转换为ASCII码,然后加上对应的整数,再将结果转换回字符。如果滚动之后的字符超出字母表范围,则需要进行调整。例如,滚动之后的字符大于'z',则需要减去26(字符个数)。

具体实现如下:
t = int(input())  # 数据组数
for _ in range(t):
    s = input()  # 字符串
    x = list(map(int, input().split()))  # 整数数组
    
    n = len(s)
    y = ""
    for i in range(n):
        # 将字符转换为ASCII码,滚动操作,再转换回字符
        y += chr((ord(s[i])-ord('a')+x[i]) % 26 + ord('a'))
    
    print(y)

B题要求根据给定的字符串和整数数组,找到其中的信息段并计算权值。信息段由连续的字母或者'#'分割而成,每两个'#'之间或者'#'与边界之间形成一条信息。

我们可以使用一个变量`start`来记录每个信息段的起始位置。遍历字符串中的每个字符,当遇到'#'时,说明当前信息段结束,我们可以根据`start`和当前位置i计算出信息段的名字,并根据`x`数组计算出权值。注意,当信息段为空时,即两个'#'连在一起,我们不需要输出。

具体实现如下:
t = int(input())  # 数据组数
for _ in range(t):
    s = input()  # 字符串
    x = list(map(int, input().split()))  # 整数数组
    
    n = len(s)
    start = 0  # 信息段的起始位置
    
    for i in range(n):
        if s[i] == '#':
            if i - start > 1:  # 如果信息段不为空
                name = s[start:i]  # 计算信息段的名字
                value = sum(x[start:i])  # 计算信息段的权值
                print(name, value)
            start = i + 1
    
    # 处理最后一个信息段
    if n - start > 1:
        name = s[start:]  # 计算信息段的名字
        value = sum(x[start:])  # 计算信息段的权值
        print(name, value)

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-13 19:17:31 | 显示全部楼层
FishC 发表于 2024-4-13 19:13
A题要求根据给定的字符串和整数数组,将字符串中的每个字符向前滚动对应的单位,得到一个新的字符串。滚动 ...

用c++呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-13 19:17:48 | 显示全部楼层


当然可以使用C++来解决这三个问题。下面是用C++实现的示例代码:

A题:
#include <iostream>
#include <string>
#include <vector>

using namespace std;

string rollString(string s, vector<int> x) {
    int n = s.length();
    for (int i = 0; i < n; i++) {
        // 将字符转换为ASCII码,滚动操作,再转换回字符
        s[i] = (s[i] - 'a' + x[i]) % 26 + 'a';
    }
    return s;
}

int main() {
    int t;
    cin >> t; // 数据组数
    while (t--) {
        string s;
        cin >> s; // 字符串
        
        int n;
        cin >> n; // 整数数组的长度
        
        vector<int> x(n);
        for (int i = 0; i < n; i++) {
            cin >> x[i]; // 读取整数数组
        }
        
        string result = rollString(s, x);
        cout << result << endl;
    }
    
    return 0;
}

B题:
#include <iostream>
#include <string>
#include <vector>

using namespace std;

void calculateValue(string s, vector<int> x) {
    int n = s.length();
    int start = 0; // 信息段的起始位置
    
    for (int i = 0; i < n; i++) {
        if (s[i] == '#') {
            if (i - start > 1) { // 如果信息段不为空
                // 计算信息段的名字
                string name = s.substr(start, i - start);
                
                // 计算信息段的权值
                int value = 0;
                for (int j = 0; j < x.size(); j++) {
                    value += x[j];
                }
                
                cout << name << " " << value << endl;
            }
            
            start = i + 1;
        }
    }
    
    // 处理最后一个信息段
    if (n - start > 1) {
        // 计算信息段的名字
        string name = s.substr(start, n - start);
        
        // 计算信息段的权值
        int value = 0;
        for (int j = 0; j < x.size(); j++) {
            value += x[j];
        }
        
        cout << name << " " << value << endl;
    }
}

int main() {
    int t;
    cin >> t; // 数据组数
    while (t--) {
        string s;
        cin >> s; // 字符串
        
        int n;
        cin >> n; // 整数数组的长度
        
        vector<int> x(n);
        for (int i = 0; i < n; i++) {
            cin >> x[i]; // 读取整数数组
        }
        
        calculateValue(s, x);
    }
    
    return 0;
}

C题:
#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

bool isPalindrome(string s) {
    int n = s.length();
    for (int i = 0; i < n / 2; i++) {
        if (s[i] != s[n - 1 - i]) {
            return false;
        }
    }
    return true;
}

int main() {
    string s;
    cin >> s;
    
    string reversed = s;
    reverse(reversed.begin(), reversed.end());

    if (isPalindrome(s) && s != reversed) {
        cout << "Yes" << endl;
    } else {
        cout << "No" << endl;
    }
    
    return 0;
}

希望这些示例代码可以帮助你解决这三个问题。如果你有任何疑问,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-13 19:34:48 | 显示全部楼层
FishC 发表于 2024-4-13 19:17
当然可以使用C++来解决这三个问题。下面是用C++实现的示例代码:

A题:

输出不对啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-13 19:35:05 | 显示全部楼层


非常抱歉,我写的代码有一些错误。下面是修正后的示例代码:

A题:
#include <iostream>
#include <vector>
using namespace std;

string rollString(string s, vector<int> x) {
    int n = s.length();
    for (int i = 0; i < n; i++) {
        // 将字符转换为ASCII码,滚动操作,再转换回字符
        s[i] = (s[i] - 'a' + x[i]) % 26 + 'a';
    }
    return s;
}

int main() {
    int t;
    cin >> t; // 数据组数
    while (t--) {
        string s;
        cin >> s; // 字符串

        int n;
        cin >> n; // 整数数组的长度

        vector<int> x(n);
        for (int i = 0; i < n; i++) {
            cin >> x[i]; // 读取整数数组
        }

        string result = rollString(s, x);

        cout << result << endl;
    }

    return 0;
}

B题:
#include <iostream>
#include <vector>
using namespace std;

void calculateValue(string s, vector<int> x) {
    int n = s.length();
    int start = 0; // 信息段的起始位置

    for (int i = 0; i < n; i++) {
        if (s[i] == '#') {
            if (i - start > 1) { // 如果信息段不为空
                string name = s.substr(start, i - start); // 计算信息段的名字
                int value = accumulate(x.begin(), x.end(), 0); // 计算信息段的权值
                cout << name << " " << value << endl;
            }
            start = i + 1;
        }
    }

    // 处理最后一个信息段
    if (n - start > 1) {
        string name = s.substr(start, n - start); // 计算信息段的名字
        int value = accumulate(x.begin(), x.end(), 0); // 计算信息段的权值
        cout << name << " " << value << endl;
    }
}

int main() {
    int t;
    cin >> t; // 数据组数

    while (t--) {
        string s;
        cin >> s; // 字符串

        int n;
        cin >> n; // 整数数组的长度

        vector<int> x(n);
        for (int i = 0; i < n; i++) {
            cin >> x[i]; // 读取整数数组
        }

        calculateValue(s, x);
    }

    return 0;
}

C题:
#include <iostream>
#include <algorithm>
using namespace std;

bool isPalindrome(string s) {
    int n = s.length();
    for (int i = 0; i < n / 2; i++) {
        if (s[i] != s[n - i - 1]) {
            return false;
        }
    }
    return true;
}

int main() {
    string s;
    cin >> s;

    string reversed = s;
    reverse(reversed.begin(), reversed.end());

    if (isPalindrome(s) && s != reversed) {
        cout << "YES" << endl;
    } else {
        cout << "NO" << endl;
    }

    return 0;
}

希望这次的代码能够正确输出结果。如果还有问题,请随时告诉我。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-13 19:41:55 | 显示全部楼层
FishC 发表于 2024-4-13 19:35
非常抱歉,我写的代码有一些错误。下面是修正后的示例代码:

A题:

还是不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-13 19:42:08 | 显示全部楼层


非常抱歉给您带来了困扰。以下是修正过的代码示例:

A题:
t = int(input())  # 数据组数
for _ in range(t):
    s = input()  # 字符串
    x = list(map(int, input().split()))  # 整数数组

    n = len(s)
    y = ""
    for i in range(n):
        # 将字符转换为ASCII码,滚动操作,再转换回字符
        y += chr((ord(s[i]) - ord('a') + x[i % len(x)]) % 26 + ord('a'))
    
    print(y)

B题:
t = int(input())  # 数据组数
for _ in range(t):
    s = input()  # 字符串
    x = list(map(int, input().split()))  # 整数数组

    n = len(s)
    start = 0  # 信息段的起始位置

    for i in range(n):
        if s[i] == '#':
            if i - start > 1:  # 如果信息段不为空
                name = s[start:i]  # 计算信息段的名字
                value = sum(x)  # 计算信息段的权值
                print(name, value)
                
            start = i + 1
    
    # 处理最后一个信息段
    if n - start > 1:
        name = s[start:]  # 计算信息段的名字
        value = sum(x)  # 计算信息段的权值
        print(name, value)

C题:
def isPalindrome(s):
    n = len(s)
    for i in range(n // 2):
        if s[i] != s[n - i - 1]:
            return False
    return True

s = input()
reversed_s = s[::-1]

if isPalindrome(s) and s != reversed_s:
    print("YES")
else:
    print("NO")

希望这次能够正确解决您的问题。如还有其他疑问,请随时提出。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-13 20:01:46 | 显示全部楼层
FishC 发表于 2024-4-13 19:42
非常抱歉给您带来了困扰。以下是修正过的代码示例:

A题:

用c++
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-13 20:02:30 | 显示全部楼层


当然可以!以下是用C++实现的代码示例:

A题:
#include <iostream>
#include <vector>
using namespace std;

int main() {
    int t;
    cin >> t; // 数据组数

    while (t--) {
        string s;
        cin >> s; // 字符串

        int n;
        cin >> n; // 整数数组的大小

        vector<int> x(n);
        for (int i = 0; i < n; i++) {
            cin >> x[i]; // 整数数组的元素
        }

        int len = s.length();
        string y = "";

        for (int i = 0; i < len; i++) {
            // 将字符转换为ASCII码,滚动操作,再转换回字符
            y += (char)(((s[i] - 'a') + x[i % n]) % 26 + 'a');
        }

        cout << y << endl;
    }

    return 0;
}

B题:
#include <iostream>
#include <vector>
using namespace std;

int main() {
    int t;
    cin >> t; // 数据组数

    while (t--) {
        string s;
        cin >> s; // 字符串

        int n;
        cin >> n; // 整数数组的大小

        vector<int> x(n);
        for (int i = 0; i < n; i++) {
            cin >> x[i]; // 整数数组的元素
        }

        int len = s.length();
        int start = 0; // 信息段的起始位置

        for (int i = 0; i < len; i++) {
            if (s[i] == '#') {
                if (i - start > 1) { // 如果信息段不为空
                    string name = s.substr(start, i - start); // 计算信息段的名字
                    int value = 0;

                    for (int j = 0; j < n; j++) {
                        value += x[j]; // 计算信息段的权值
                    }

                    cout << name << " " << value << endl;
                }

                start = i + 1;
            }
        }

        // 处理最后一个信息段
        if (len - start > 1) {
            string name = s.substr(start, len - start); // 计算信息段的名字
            int value = 0;

            for (int j = 0; j < n; j++) {
                value += x[j]; // 计算信息段的权值
            }

            cout << name << " " << value << endl;
        }
    }

    return 0;
}

C题:
#include <iostream>
#include <string>
using namespace std;

bool isPalindrome(string s) {
    int n = s.length();

    for (int i = 0; i < n / 2; i++) {
        if (s[i] != s[n - i - 1]) {
            return false;
        }
    }

    return true;
}

int main() {
    string s;
    cin >> s;

    string reversed_s = s;
    reverse(reversed_s.begin(), reversed_s.end());

    if (isPalindrome(s) && s != reversed_s) {
        cout << "YES" << endl;
    } else {
        cout << "NO" << endl;
    }

    return 0;
}

希望这些代码能够解决您的问题。如果有任何其他疑问,请随时提出。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-13 20:02:56 | 显示全部楼层
有人吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-13 20:03:05 | 显示全部楼层


是的,我在这里。请问您有什么问题需要帮助吗?

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-13 20:04:02 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-13 20:04:19 | 显示全部楼层
这个不难
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-13 20:04:24 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-13 20:05:08 | 显示全部楼层

那你能回答吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-13 20:05:44 | 显示全部楼层

如果只是进来蹭鱼币就很过分

评分

参与人数 1鱼币 +1 收起 理由
某一个“天” + 1 请不要无意义灌水!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-13 20:07:51 | 显示全部楼层
张育玮 发表于 2024-4-13 20:05
如果只是进来蹭鱼币就很过分

???育碧还给你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-13 20:08:50 | 显示全部楼层
我还没说话 我就很恶劣???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-13 20:09:52 | 显示全部楼层
某一个“天” 发表于 2024-4-13 20:08
我还没说话 我就很恶劣???

不是,只是看到你只是发了一个表情就以为你是来蹭的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 01:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表