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