蓝桥杯-------基础训练--特殊回文数,特殊的数字,回文数(JAVAdaima)

一、特殊回文数

     问题描述:123321是一个非常特殊的数,它从左边读和从右边读是一样的。输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。

      解题思想:这个题要求的搜索范围很大,要求写出所有满足条件的五位和六位十进制数。而满足条件的限定:【第一个位数】乘以2+【第二个位数】乘以2+【第三个位数】乘以2等于n的值;或者第一个位数】乘以2+【第二个位数】乘以2+【第三个位数】等于n的值即可。而且这道题有一个最让人讨厌的点就是:“按从小到大的顺序输出满足条件的整数,每个整数占一行” 涉及到了排序。所以我使用了ArrayList数组,它可以创建一个对象,然后向数组中添加数据,最后再利用Collections类的sort()方法对ArrayList数组的对象进行排序即可满足题目的要求。其实实现搜索范围时,也用到了我的另一篇博客:有关全排列的知识。下面给出相应代码:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class 特殊回文数 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		ArrayList<Integer> rs = new ArrayList<Integer>();   
		for(int i = 1;i<10;i++)
			for(int j = 0;j<10;j++)
				for(int k = 0;k<10;k++)
				{
					if(2*i+2*j+k==n)
						rs.add(i*10000+j*1000+k*100+j*10+i);
					if(2*i+2*j+2*k==n)
						rs.add(i*100000+j*10000+k*1000+k*100+j*10+i);
					
				}
		Collections.sort(rs);    
		for(int i = 0; i<rs.size();i++)
		{
			System.out.println(rs.get(i));
		}

	}

}

上面代码就是将我上文所说的解题思想代码化的结果。

二、特殊的数字

   问题描述:153是一个非常特殊的数,它等于它的每位数字的立方和,即153=1*1*1+5*5*5+3*3*3。编程求所有满足这种条件的三位十进制数。按从小到大的顺序输出满足条件的三位十进制数。

   解题思想:其实算法竞赛的人都做过这个题,他有一个别名叫水仙花数,需要满足的条件就是每个位数的3此方求和即为该数本身。与上一题类似,搜索仍然采用全排列的方式,而限定的条件:【第一个位数】的3此方+【第二个位数】3此方+【第三个位数】3此方=该数本身。而可变数组与排序均采用上文提到的ArrayList数组,以及Collection类的sort()方法进行实现的。

下面给出解题代码:

import java.util.ArrayList;
import java.util.Collections;
public class 特殊的数字 {
	public static void main(String[] args) {
		ArrayList<Integer> rs = new ArrayList<Integer>(); 
		for(int i = 1;i<10;i++)
			for(int j = 0;j<10;j++)
				for(int k = 0;k<10;k++)
				{
					if(i*i*i+j*j*j+k*k*k==i*100+j*10+k)
					{
						rs.add(i*100+j*10+k);
					}
				}
		Collections.sort(rs);
		for(int i = 0; i<rs.size();i++)
		{
			System.out.println(rs.get(i));
		}

	}

}

三、回文数

    问题描述:1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。按从小到大的顺序输出满足条件的四位十进制数。

    解题思想:其实与前两个题的方法完全是一样的,还是限定条件:第一个位数】乘以2+【第二个位数】乘以2=该数本身。此处就不做更多的解释了。下面给出解题代码:

import java.util.ArrayList;
import java.util.Collections;

public class 回文数 {
	public static void main(String[] args) {
		ArrayList<Integer> rs = new ArrayList<Integer>();
		for(int i = 1; i < 10; i++)
		{
			for(int j = 0; j < 10; j++)
			{
				rs.add(i*1000+j*100+j*10+i);
			}
		}
		Collections.sort(rs);
		for(int k = 0; k < rs.size(); k++)
		{
			System.out.println(rs.get(k));
		}
				
	}

}

若有疑问可留言!!!!!!!!!!

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值