牛国神君牛哥的赞美文生成挑战 - C++ 代码实现

这天,牛国神君牛哥要求他的臣子壕哥写一篇赞美自己功绩的文章。

壕哥很担心自己写不好惹得牛哥龙怒,该怎么办呢?壕哥想到了最近在牛国网络大火的 AICharGPT,他决定先用 AI 生成一篇文章,然后进行少量修改。

AI 将会生成一篇文章(用 01 串来表示),随后,壕哥将对这篇文章进行修改,他所能做的修改如下:

  1. 选择一个 01 串中的位置,将该位置的 0 或 1 取反
  2. 选择一个 01 串中的位置,将该位置的 0 或 1 删除
  3. 选择一个 01 串中的空位,在该空位上插入一个 0 或者 1

为了不将文章改乱,壕哥决定刚好进行两次修改,并且修改后的文章和原文章的长度要相等。

注意,壕哥是个完美主义者,如果被你统计的文章中存在能够被壕哥以 1 次修改甚至更低的次数获得的文章,那么他将非常不高兴,所以请不要做删除数字再加回去这种事哦。

现在壕哥想知道,他所能做的修改能够生成多少篇本质不同的文章(本质不同文章指修改后的两个 01 串不相等),这个问题太难了,壕哥决定向你求助。

输入描述:

输入包括一行,包括一个 01 串 s (2≤s.size()≤1000)。

输出描述:

输出包括一行,包括一个整数 k,表示的是壕哥根据 s 以及修改规则能够产生的本质不同 01 串数量。

示例1

输入 110011 输出 19

示例2

输入 1010 输出 9

生成一段 c++ 代码并测试 s 为 110011 时输出是多少

这里是一份 C++ 代码,可供参考:

#include <iostream>
#include <vector>
#include <set>
using namespace std;

// 判断两个字符串是否本质不同
bool isDifferent(const string& s1, const string& s2) {
    int cnt = 0;
    for (int i = 0; i < s1.size(); i++) {
        if (s1[i] != s2[i]) {
            cnt++;
        }
    }
    return cnt >= 2;
}

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

    // 枚举所有可能的修改方式,生成所有可能的字符串
    set<string> allStrings;
    for (int i = 0; i < s.size(); i++) {
        string s1 = s;
        s1[i] = (s1[i] == '0' ? '1' : '0');
        for (int j = 0; j < s1.size(); j++) {
            string s2 = s1;
            s2.erase(s2.begin() + j);
            for (int k = 0; k < s2.size(); k++) {
                string s3 = s2;
                s3.insert(s3.begin() + k, '0');
                allStrings.insert(s3);
                s3[k] = '1';
                allStrings.insert(s3);
            }
        }
    }

    // 判断所有字符串是否本质不同
    set<string> differentStrings;
    for (auto iter1 = allStrings.begin(); iter1 != allStrings.end(); iter1++) {
        bool flag = true;
        for (auto iter2 = differentStrings.begin(); iter2 != differentStrings.end(); iter2++) {
            if (!isDifferent(*iter1, *iter2)) {
                flag = false;
                break;
            }
        }
        if (flag) {
            differentStrings.insert(*iter1);
        }
    }

    cout << differentStrings.size() << endl;

    return 0;
}

当输入为 110011 时,程序输出 19

牛国神君牛哥的赞美文生成挑战 - C++ 代码实现

原文地址: https://www.cveoy.top/t/topic/mCDi 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录