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

来源:互联网 发布:职业医师考试数据库 编辑:程序博客网 时间:2024/05/16 11:03

一、特殊回文数

     问题描述: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 stubScanner 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));}}}

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