蓝桥杯-回文数(java)

本文介绍了一种通过编程方式寻找所有四位十进制回文数的方法,并提供了完整的Java实现代码。回文数是指正读和反读都相同的数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                         基础练习 回文数  
                时间限制:1.0s   内存限制:512.0MB

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



public class huiwenshu2 {
    /**
     * 四位回文數
     * @param args
     */
    public static void main(String[] args) {
        for(int i = 1000; i<10000; i++){
            String src = String.valueOf(i);
            if((src.charAt(0)==src.charAt(src.length()-1)) && (src.charAt(1)==src.charAt(src.length()-2))){
                System.out.println(i);
            }
        }

//      String src = String.valueOf(1234);
//      System.out.println(src.charAt(src.length()));
    }
    /**
     * 任意数字回文数
     * @param args
     */
    /*public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int src = scanner.nextInt();
        int flag = 0;
        String start = "1";
        String end = "1";
        while(flag < src-1){
            start += "0"; 
            flag++;
        }
        flag = 0;
        while(flag < src){
            end += "0"; 
            flag++;
        }

        for(int j = Integer.parseInt(start); j < Integer.parseInt(end); j++){
            String temp = String.valueOf(j);
            String first = "";
            String last = "";
            for(int i = 0; i < src/2; i++){
                first += temp.charAt(i);
                last += temp.charAt(src-i-1);
            }
//          String firstStr = first.toString();
//          String lastStr = last.toString();
            if(first.toString().trim().equals(last.toString().trim())){
                System.out.println(j);
            }
        }

    }*/
}
<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
### 关于蓝桥杯竞赛中的回文数组问题 #### 解题思路 对于涉及回文数组的问题,核心在于理解回文的概念及其特性。回文是指正读反读都相同的字符串或数字序列。针对给定的输入日期,目标是找到符合条件的下一个回文日期以及特定模式下的回文日期。 为了实现这一功能,可以采用如下策略: - **解析输入**:将输入的8位整数转换成易于操作的形式。 - **生成候选者**:基于当前日期逐步增加天数直到发现新的回文日期为止;对于ABABBABA类型的回文,则需特别构建满足该模式的日历格式并验证其有效性。 - **校验条件**:确保所选日期确实构成有效的公历年份,并且符合题目要求的具体形式。 - **返回结果**:按照指定格式输出两个不同的回文日期作为最终答案[^4]。 下面是具体的Java代码示例用于解决上述提到的任务: ```java import java.util.*; public class PalindromeDate { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String input = scanner.nextLine(); // 将输入转化为容易处理的形式 Date date = parse(input); // 查找下一个普通的回文日期 while (!isPalindrome(date.toString())) { date = nextDay(date); } System.out.println(date.format()); // 查找下一个特殊模式(ABABBABA)的回文日期 do { date = nextDay(date); } while (!(isValidSpecialPattern(date))); System.out.println(date.format()); } private static boolean isPalindrome(String s){ int n=s.length(); for(int i=0;i<n/2;++i){ if(s.charAt(i)!=s.charAt(n-i-1)){ return false; } } return true; } private static boolean isValidSpecialPattern(Date d){ String str=d.toString(); char a=str.charAt(0),b=str.charAt(1); return Arrays.equals(str.toCharArray(),new char[]{a,b,a,b,b,a,b,a}); } // 假设存在这样的类来简化逻辑, 实际应用中需要具体实现这些方法. private static Date parse(String dateString){...} private static Date nextDay(Date currentDate){...} } class Date{ private final int year; private final int month; private final int day; public Date(int y,int m ,int d){ this.year=y; this.month=m; this.day=d; } @Override public String toString(){ return String.format("%d%02d%02d",year,month,day); } public String format(){ return String.format("%d-%02d-%02d",year,month,day); } // ...其他必要的成员函数... } ``` 此段程序展示了如何通过不断迭代每一天的方式去查找最近的一个普通回文日以及具有`ABABBABA`结构特征的日子。需要注意的是,在实际编码过程中还需要考虑闰年等因素的影响以保证算法准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值