-->
当前位置:首页 > 题库 > 正文内容

7-23 翻转车牌 (10 分)

Luz5年前 (2021-03-05)题库1782
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;
}