基础练习 特殊回文数

哎这道题真是。。。我刚开始把题里边的输入一个正整数n误看成了这个要输出的五位数或者六位数每一位都是正整数,然后就大费周折的把有位数是0的给排除掉了最后还给错了

!!!!认真看题

我的思路,把结果分成六位数和五位数,五位数一定比六位数小,所以先输出五位数。判断的时候,只看三位,

如果第一位加第二位加第三位加第二位加第三位结果为n,则可以组成一个五位数;

如果第一位加第二位加第三位加第一位加第二位加第三位结果为n,则可以组成一个六位数

直接暴力法来做

#include<iostream>
#include<cstring> 
using namespace std;
int main(){
	int n;
	scanf("%d",&n); 
	int six[900];
	memset(six,0,sizeof(six));
	//如果是5位数, 
	for(int i=100;i<=999;i++){
		int res[4];
		int k=0;
		int skip=0;
		int temp=i;
		while(temp){
			res[k++]=temp%10;
//			if(temp%10==0){    //错因:::每一位都是正整数,如果是0,把这个数跳过 
//				skip=1;
//				break;
//			}
			temp/=10;
		}
//		if(skip==1){
//			continue;
//		}
		if(res[0]+res[1]+res[2]+res[1]+res[2]==n){ 
			printf("%d%d%d%d%d\n",res[2],res[1],res[0],res[1],res[2]);
		} 
		if(res[0]+res[1]+res[2]+res[0]+res[1]+res[2]==n){    //找到六位数字的和为n的数,但是由于题目里边说结果要从小到大输出,六位数一定大于五位数,所以在这不能输出 
//			printf("%d\n",i); 
//			printf("%d %d %d \n",res[2],res[1],res[0]);
			six[i-100]=1;
		}
		
	}
	//如果是6位数 
	for(int i=100;i<=999;i++){
		if(six[i-100]==1)
		{
//			cout<<i<<endl; 
			int res[4];
			int k=0;
			int temp=i;
			while(temp){
				res[k++]=temp%10;
				temp/=10;
			}
			printf("%d%d%d%d%d%d\n",res[2],res[1],res[0],res[0],res[1],res[2]);
		}
	}
	return 0;
} 

 

 

应该是最后一次刷蓝桥杯的题了,争取拿省一,加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值