7-23 翻转车牌 (10 分)
有一个奇数位(如5位)的车牌号,由基本数字(0~9)组成,问有多少车牌翻转180度后号码还是原来的车牌并且各位数字之和能被3整除。(csp-s2019初试题)
输入格式:
一个数字:n(<10),表示车牌号位数
输出格式:
输出所有满足要求的车牌号码(按字典序排列,每行一个号码),最后一行是满足要求的车牌号总数。
输入样例:
3
输出样例:
在这里给出相应的输出。例如:
000 111 609 888 906 5
作者
严华云
单位
湖州师范学院
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include<iostream>
using namespace std;
int n,cnt;
int a[6]={0,0,1,6,8,9},b[10]={1};
void dfs(int k){
int i,j,sum,x;
if(k>n){
//for(j=1;j<=n;j++){
// cout<<b[j];
//}
for(x=1;x<n/2+1;x++){
if(b[x]==6&&b[n+1-x]!=9){
return;
}
else if(b[x]==9&&b[n+1-x]!=6){
return;
}
if(b[x]!=6&&b[x]!=9&&b[x]!=b[n+1-x]){
return;
}
}
if(b[n/2+1]==6||b[n/2+1]==9){
return;
}
sum=0;
for(j=1;j<=n;j++){
sum+=b[j];
}
if(sum%3==0){
cnt++;
for(j=1;j<=n;j++){
cout<<b[j];
}
cout<<endl;
}
}
else{
for(i=1;i<=5;i++){
b[k]=a[i];
dfs(k+1);
}
}
}
int main(){
cin>>n;
dfs(1);
cout<<cnt;
return 0;
}