全WA求助
查看原帖
全WA求助
1274445
AlanRosston楼主2024/3/28 18:46

第一个测试点和两个样例都在本地跑过了,答案都对得上。不知道为什么已提交全部都是WA......

求大佬救救QWQ

#include <iostream>
#include <string>
#include <vector>
#include <cctype>
#include <algorithm>

using namespace std;

int main(void)
{
    int flag1, flag2, flag3; // 分别表示大小写字母与星号、填充次数、是否逆序
    cin >> flag1 >> flag2 >> flag3;
    cin.ignore();
    string original_str;
    getline(cin, original_str);

    int position;
    position = original_str.find('-');
    bool judge0 = (position != -1); // 寻址判断
    bool judge1 = isdigit(original_str[position - 1]) && isdigit(original_str[position + 1]); // 同为数字判断
    bool judge2 = isalpha(original_str[position - 1]) && isalpha(original_str[position + 1]); // 同为字母判断
    bool judge3 = original_str[position + 1] - original_str[position - 1] > 0; // 严格递增判断
    while(judge0 && (judge1 || judge2) && judge3) {
        string change;
        int first = position - 1, last = position + 1;
        int len = original_str[last] - original_str[first] - 1; // 记录中间剩余字符的长度

        if(len == 0) {
            original_str.erase(position, 1);

            judge0 = (position != -1);
            judge1 = isdigit(original_str[position - 1]) && isdigit(original_str[position + 1]);
            judge2 = isalpha(original_str[position - 1]) && isalpha(original_str[position + 1]);
            judge3 = original_str[position + 1] - original_str[position - 1] > 0;

            continue;
        } // 相邻数特判

        if(flag1 == 3) { // 星号特判
            for(int i = 1; i <= len * flag2; i++) change.push_back('*'); // 直接填充len*flag2长度的*
            original_str.replace(position, 1, change);
        } else if(judge1) { // 数字特判
            for(int i = 1; i <= len; i++) {
                for(int j = 1; j <= flag2; j++) change.push_back(original_str[first] + i); //每次填充flag2次的首位数字+i
            }

            if(flag3 == 2) reverse(change.begin(), change.end());

            original_str.replace(position, 1, change);
        } else { // 最后判断字母
            for(int i = 1; i <= len; i++) {
                for(int j = 1; j <= flag2; j++) change.push_back(original_str[first] + i); 
            }

            if(flag1 == 2) {
                for(int i = 0; i < change.length(); i++) change[i] = toupper(change[i]);
            }

            if(flag3 == 2) reverse(change.begin(), change.end());

            original_str.replace(position, 1, change);
        }

        position = original_str.find('-');

        judge0 = (position != -1);
        judge1 = isdigit(original_str[position - 1]) && isdigit(original_str[position + 1]);
        judge2 = isalpha(original_str[position - 1]) && isalpha(original_str[position + 1]);
        judge3 = original_str[position + 1] - original_str[position - 1] > 0;
    }

    cout << original_str << endl;

    return 0;
}
2024/3/28 18:46
加载中...