您的位置:首页 > 编程语言 > Java开发

算法-蓝桥杯-基础练习 特殊回文数 (JAVA)

2018-03-22 20:40 435 查看

1 引言

    这道题目是“回文数”的延伸,不会做“回文数”这个问题的朋友,可以点击这里。现在我们开始讲解,今天这道“特殊回文数”的问题。

2 题目
问题描述
  123321是一个非常特殊的数,它从左边读和从右边读是一样的。
  输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。输入格式  输入一行,包含一个正整数n。输出格式  按从小到大的顺序输出满足条件的整数,每个整数占一行。样例输入52样例输出899998
989989
998899数据规模和约定  1<=n<=54。

3 源代码(第一种)

import java.util.*;
class Main
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for(int i=1;i<=9;i++)
for(int j=0;j<=9;j++)
for(int k=0;k<=9;k++)
for(int m=0;m<=9;m++)
for(int q=0;q<=9;q++)

{
if(i==q&&j==m)
{
if(i+j+k+m+q==n)
System.out.printf("%d%d%d%d%d\n",i,j,k,m,q);
}
}
for(int i=1;i<=9;i++)
for(int j=0;j<=9;j++)
for(int k=0;k<=9;k++)
for(int m=0;m<=9;m++)
for(int q=0;q<=9;q++)
for(int w=0;w<=9;w++)
{
if(i==w&&j==q&&k==m)
{
if(i+j+k+m+q+w==n)
System.out.printf("%d%d%d%d%d%d\n",i,j,k,m,q,w);
}
}
}
}

4 源代码(第二种)

import java.util.*;
class Main
{
public static void main(String[] args)
{
int i,m;
Scanner sc=new Scanner(System.in);
m=sc.nextInt();
for(i=10000;i<=99999;i++)
{
int a,b,c,d,e;
//取出各位的数字
a=i/10000;
b=(i-a*10000)/1000;
c=(i-a*10000-b*1000)/100;
d=(i-a*10000-b*1000-c*100)/10;
e=(i-a*10000-b*1000-c*100-d*10);
if(a==e&&b==d)
{
if((a+b+c+d+e)==m)
{
System.out.println(i);
}
}

}
for(i=100000;i<=999999;i++)
{
int a,b,c,d,e,f;
a=i/100000;
b=(i-100000*a)/10000;
c=(i-100000*a-10000*b)/1000;
d=(i-100000*a-10000*b-1000*c)/100;
e=(i-100000*a-10000*b-1000*c-100*d)/10;
f=i-100000*a-10000*b-1000*c-100*d-10*e;
if(a==f&&b==e&&c==d)
{
if((a+b+c+d+e+f)==m)
{
System.out.println(i);
}
}

}
}
}

5 思路讲解

    第一种方法与“回文数”那道题目,解法相似,都是设置多重循环,符合要求就输出;第二种方法(以五位数为例)是从“10000”到“99999”开始遍历,设置五个变量,取出每一位的数字,然后再判断是否符合题目的要求,符合就输出。两种代码的书写形式虽然不同,但是整体的思路还是相同。不知道两种代码的性能如何,我没有学习过算法分析,我截取了蓝桥杯上两种代码运行结果的截图,哪位朋友可以帮忙分析一下两种算法的性能?



    截图中上面的是第一种代码运行结果,下面的是第二种代码的运行结果。

6 结束语

    从来没想过,自己竟然可以使用两种方法。。。。。我会继续努力!
    分享和帮助是人生一大乐事,希望可以帮助您。本人才疏学浅,如果有不当之处,还请批评指正。同时欢迎大家评论、点赞及转发!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息