文章目录
🏅前言:
代码含详细注释及解题思路。若有不理解的地方,欢迎大家探讨交流,有问必回📖
L1-027 出租(Java语言)-天梯赛
下面是新浪微博上曾经很火的一张图:
一时间网上一片求救声,急问这个怎么破。其实这段代码很简单,index
数组就是arr
数组的下标,index[0]=2
对应 arr[2]=1
,index[1]=0
对应 arr[0]=8
,index[2]=3
对应 arr[3]=0
,以此类推…… 很容易得到电话号码是18013820100
。
本题要求你编写一个程序,为任何一个电话号码生成这段代码 —— 事实上,只要生成最前面两行就可以了,后面内容是不变的。
输入格式:
输入在一行中给出一个由11位数字组成的手机号码。
输出格式:
为输入的号码生成代码的前两行,其中arr
中的数字必须按递减顺序给出。
输入样例:
18013820100
输出样例:
int[] arr = new int[]{8,3,2,1,0};
int[] index = new int[]{3,0,4,3,1,0,2,4,3,4,4};
🎯解题思路:
🦀大体方向是:
计算出数据
为
int[] arr = new int[]{8,3,2,1,0};
int[] index = new int[]{3,0,4,3,1,0,2,4,3,4,4};
存入两个数组
中,再想办法按要求格式打印出来
🎇第一行数据存储:输入样例拿字符串存储,利用TreeSet集合去重并实现升序{0,1,2,3,8}
,再把TreeSet转成Arraylist集合利用Cellction工具类reverse方法实现逆序变成降序{8,3,2,1,0}
🎇第二行数据存储:定义一个临时变量index,取代for循环中对应的{3,0,4,3,1,0,2,4,3,4,4}
值,
🎀使用两个缓冲数组在for循环中进行拼接即可
🎯题解:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String a=sc.next();//获取电话号码
TreeSet aa = new TreeSet();
for (int i = 0; i <a.length(); i++) {
aa.add(a.charAt(i));//电话号码去重后得arr并按升序排列
}
ArrayList arr=new ArrayList(aa);//将去重后数字存入list集合中
Collections.reverse(arr);//逆序排列,从升序变成降序
StringBuffer a1=new StringBuffer("int[] arr = new int[]{");
StringBuffer a2=new StringBuffer("int[] index = new int[]{");
for (int i = 0; i <11 ; i++) {
if(i<arr.size()){//第一行所有信息拼接到缓冲字符串a1中
if(i==0){
a1.append(arr.get(i));
if(arr.size()==1){//以防电话号码是11111111111【全是相同数字】
a1.append("};");
}
}else{
a1.append(","+arr.get(i));
if(i==arr.size()-1){
a1.append("};");
}
}
}
int index=(arr.indexOf(a.charAt(i)));//获取电话号码在arr去重数组对应的下标存入临时变量Index中
if(i==0){//第二行所有信息拼接到缓冲字符串a2中
a2.append(index);
}else {
a2.append(","+index);
if(i==10){
a2.append("};");
}
}
}
System.out.println(a1+"\n"+a2);
}
}