手柄君的小阁

个人私货聚集地

蓝桥杯(大专组) 校内训练 1001.不重复数

本文最后更新于 2018 年 5 月 10 日,其中的内容可能有所发展或发生改变,敬请注意。

1001.不重复数

Time Limit: 1000 MS Memory Limit: 32768 KB

描述

给定N是一个正整数,求比N大的最小“不重复数”,这里的不重复是指没有两个相等的相邻位,如1102中的11是相等的两个相邻位故不是不重复数,而12301是不重复数。

输入

输入由多组测试数据组成。第一行输入一个整数t,表示测试数据的组数。
接下来的t行,每行输入一个数。

输出

输出有t行,每行依次对应一组测试数据的运算结果。

示例输入

3
11000000
222222222
333333333

示例输出

12010101
230101010
340101010

解题思路

通过 byte[] 比对每一位上区别判断是否为重复数,
使用递归来查找每一位

Ac源码(Java)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import java.util.Scanner;
 
public class Main {
	static byte[] byteArr;
	static int realInputInt;
	static int returnSameIndex;
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int times = sc.nextInt();
		int[] nums = new int[times];
		for ( int i = 0; i < times; i ++ ){
			nums[i] = sc.nextInt();
		}
		sc.close();
		for ( int i = 0; i < times; i ++ ){
			System.out.println(noSame(nums[i] + 1));
		}
	}
	private static int noSame(int inputInt){
		byteArr = Integer.toString(inputInt).getBytes();
		sameIndex(byteArr);
		if (returnSameIndex > 0){
			realInputInt = byteArr.length - returnSameIndex - 1;
			inputInt /= Math.pow(10,realInputInt);
			inputInt += 1;
			while(realInputInt > 0){
				inputInt *= 10;
				realInputInt -= 1;
				if(realInputInt > 0){
					inputInt *= 10;
					inputInt += 1;
					realInputInt -= 1;
				}
			}
			return noSame(inputInt);
		}
		return inputInt;
	}
	private static void sameIndex(byte[] inByteArr){
		returnSameIndex = 0;
		for(int i = 1; i < inByteArr.length; i++){
			if (inByteArr[i] == inByteArr[i-1]){
				returnSameIndex = i;
				return;
			}
		}
	}
}
  1. 头像 ZHH说道:

    nice

来一发吐槽