题解:P12377 [蓝桥杯 2023 省 Python B] 2023

· · 题解

本题暴力+模拟就能过。

思路

首先,枚举 1234567898765432 的所有数,倒序分解数位后用快慢指针看看是否满足条件。

倒序分解数位可以通过每次不断把枚举到的数一直取余十,但一直取余十会把 i 清零,所以要用一个 z 变量储存 i 的值。

那如何判断是否满足条件呢?先看看条件的代码翻译:如果 i 的数码不包含按顺序的 2023,则 ans 增加一。我们可以不断判断第快指针个数位是否是 2023 的第慢指针个数位,如果是,慢指针加一。当慢指针大于三的时候,即概数有 2023 这四个数,所以跳出循环。最后看看慢指针是否是四就能知道是否包含 2023

代码

#include<bits/stdc++.h>
using namespace std;
int a[]={2,0,2,3},top,ans;
int main(){
    for(int i=12345678;i<=98765432;i++){
        top=0;
        int z=i,now[8]={},cnt=0;
        while(z){
            now[cnt++]=z%10;
            z/=10;
        }
        for(int i=cnt;i>=0;i--)
            if(now[i]==a[top]){
                top++;
                if(top>3) break;
            }
        if(top>3) continue;
        ans++;
    }
    cout<<ans;
    return 0;
}

~给个一键三连吧!~