问题描述
A 市的车牌由六位组成:
-
其中前三位可能为数字 0 至 9,或者字母 A 至 F,每位有 16 种可能。
-
后三位只能是数字 0 至 9。
-
为了减少攀比,车牌中不能有连续三位是相同的字符。
例如,202020 是合法的车牌,AAA202 不是合法的车牌,因为前三个字母相同。
请问,A 市有多少个合法的车牌?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
答案:4002750
题解一
DFS:
#include <iostream>
#include <vector>
using namespace std;
int ans;
vector<int> path;
void dfs(int u)
{
if(u == 7)
{
bool flag = true;
for (int i = 5; i >= 2; i --)
if(path[i] == path[i - 1] && path[i - 1] == path[i - 2])
flag = false;
if(flag) ans ++;
return;
}
int n = u <= 3? 15 : 9;
for (int i = 0; i <= n; i ++)
{
path.push_back(i);
dfs(u + 1);
path.pop_back();
}
}
int main()
{
dfs(1);
cout << ans << endl;
return 0;
}
题解二
DFS(剪枝):
#include <iostream>
using namespace std;
int ans;
void dfs(int u, int a, int b)
{
if(u == 7)
{
ans ++;
return;
}
int n = u <= 3? 15 : 9;
for (int i = 0; i <= n; i ++)
{
if(a == b && b == i) continue;
dfs(u + 1, b, i);
}
}
int main()
{
dfs(1, -1, -1);
cout << ans << endl;
return 0;
}