寻找ABC的个数

记录一下,上次校赛没有做出来。。。。。。。。。。。。。。。。

题目(大概好像意思)是:给出一个字符串,找出按顺序组合成的ABC这类字符串的个数。

比如:

ABC,则ABC顺序组合只有1个,组合序列为123

BAC,则ABC顺序组合只有0个

ABBABAC,则ABC顺序组合只有4个,组合序列为127,137,157,457

AABBCC,则顺序组合的有8个,组合序列为135,136,145,146,235,236,245,246

ABCBC,则顺序组合的有3个,组合序列为123,125,145

解题思路(早上起床的时候,突然想到,但在比赛的时候,其他队已经做出来了,额,自己记录一下就行):

先把输入字符串进行扫描,分别用int A, int AB来记录被扫描的字符串中出现A的个数和能组合成AB的个数

当扫面到一个'B'这个字符时,把A结果累加起来成为AB的值。

当扫描到一个'C'这个字符时,把AB结果累加起来就是最后的结果。

直到把字符扫描完。

代码:

#include <iostream>
#include <string>

#define ll long long

using namespace std;

int main() {
    
    ll A,AB; // 用来记录被扫描的字符串中出现A的个数和能组合成AB的个数
    ll  ans;
    string str;
    while(cin >> str) {
        A = 0;
        AB = 0;
        ans = 0;
        
        for (int i = 0; i < str.size(); i++) {
            if (str[i] == 'A') A++;
            else if (str[i] == 'B') {
                AB += A;
            }else if (str[i] == 'C') {// 如果扫描到'C'字符了,则看一下前面能AB的组合数 
                ans += AB; 
            }
        }
        cout << ans << endl;
    }
    
    
    return 0;
} 
View Code

。。。。。如果有错,欢迎指错。。。。。。。。。。。。

原文地址:https://www.cnblogs.com/hello-dummy/p/13239019.html