首页 > 试题广场 >

相邻的数字

[编程题]相邻的数字
  • 热度指数:147 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给你一个整数n,请你算出在中的所有整数,数位上拥有连续的相同的数字最多的数字是哪个?如果有多个,请从小到大依次输出出来。

例如:数字12235556中,数位上有3组连续的相同数字,分别为

输入描述:
一个整数


输出描述:
若干个整数,表示答案。
示例1

输入

100

输出

99 100 110

说明

[99,100,110]的连续相同数字个数都为1,其他的90\sim110内的数字的连续相同数字个数为0
示例2

输入

999

输出

999 1000
本题的坑,n的范围是(10²到10¹²),java中需要用long接收,int【 2×10⁹】范围不够
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        //本题的坑,n的范围是(10²到10¹²),java中需要用long接收,int【 2×10⁹】范围不够
        long n = in.nextLong();
        List<String> num = new ArrayList<>(); // 存储连续相同数字的数组
        int maxInt = 0;  // 最大连续相同数

        // 根据 n 进行循环,最外层的for循环中i表示[n-10,n+10]的所有整数,需要从n-10开始,因为最后的输出是从小到大的
        for(long i = n - 10;i <= n+10;++i){
            // long转字符串方便操作
            String j = Long.toString(i);
            int sum = 0;  // 用于统计下面for循环中的最大连续相同数【注意,它和上面的maxInt不一样,sum是局部的,maxInt是全局的】
            for(int x = 0;x < j.length()-1;++x){ 
                // 因为有y = x + 1的条件,为了防止索引溢出,需要让 x < j.length()-1
                int y = x + 1;
                if(j.charAt(x) == j.charAt(y)){
                    sum++;
                    // 如果局部的等于全局的 最大连续相同数,即需要记录到num中
                    if(sum == maxInt){
                        num.add(j);
                    // 如果局部的大于全局的,即出现了新的 最大连续相同数,需要清空旧的num列表,再重新开始记录,并且把全局的最大值+1
                    }else if(sum > maxInt){
                        num.clear(); // 将num数组清空,因为拥有更多相同数字的数字出现了
                        maxInt++; 
                        num.add(j);
                    // 如果局部的小于全局的,即不符合 拥有连续的相同的数字最多的数字 条件,继续循环调试
                    }else{
                        continue;
                    }
                }
            }
        }
        // 最后输出结果
        for(String z : num){
            System.out.print(z + " ");
        }
    }
}


发表于 2025-11-09 19:28:02 回复(0)