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

本题暴力+模拟就能过。

思路

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

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

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

代码

#include
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;
}

给个一键三连吧!
原文链接

你可能感兴趣的:(洛谷题解:P12377 [蓝桥杯 2023 省 Python B] 2023)