题解:P8740 [蓝桥杯 2021 省 A] 填空问题
前言
马蜂很差,不喜勿喷。
A 题
题目很好理解,代码也可以弄出来:
#include<bits/stdc++.h>
using namespace std;
int a[10];
int main(){
for(int i=1;i<=10;i++)a[i-1]=2021;//赋值
for(int i=0;i>=0;i++){
int k=i;
while(k)
if(a[k%10]!=0)a[k%10]--,k/=10;//判断,可以就--
else{cout<<i-1;return 0;} //不可以就输出
}
}
算出来答案是
B 题:
本人是个蒟蒻,只有枚举才能会,大佬们应该都会吧。
算出来答案是
C 题:
这,三重循环暴力枚举啊,多么水!
枚举下因子个数就好了, 贴个主要代码吧。
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int k=1;k<=n;k++)
if(a[i]*a[j]*a[k]==n)ans++;
算出来答案是
D 题
纯纯的最短路径,通过 Floyd(弗洛伊德) 来求就好了,算法简单,就不贴了。
算出来答案是
E 题
状压 DP!
转移方程其他题解都讲的很好了,我就不推了。(还不是我菜)
算出来答案是
最终代码
#include<iostream>
using namespace std;
int main() {
string ans [] = {
"3181",
"40257",
"2430",
"10266837",
"881012367360",
};
char T;
cin >> T;
cout << ans[T - 'A'] << endl;
return 0;
}
欢迎大佬们指出错误!