3530. 和你在一起
单点时限: 1.0 sec
内存限制: 256 MB
我想和你在一起
直到我不爱你
宝贝 人和人 一场游戏
我愿意为你死去
如果我还爱你
宝贝 反正活着 也没意义
宝贝 我也只能 这样为你
——李志《和你在一起》
现场4分10秒,小哥跟着逼哥嘶吼,泪流满面。我要和你在一起,直到我不爱你。有这么 n 个数字,联成一排拼到一起便是我爱你的时间,那么我们会在一起多久呢
例如: n=3 时,3 个整数 13,312,343 联接成的最长时间为: 34331213。
又如: n=4 时,4 个整数 7,13,4,246 联接成的最长时间为: 7424613。
输入格式
n (1≤n≤20),表示 n 个数。
接下来一行 n 个正整数,大小不超过 104。
输出格式
拼成的最长时间。
样例
input
3
623 583 413
output
623583413
这个题稍微麻烦一点 注意13,312,343 联接成的最长时间为: 34331213
也就是说是要考虑多位的情况的,之前只考虑了首位只过了4个测试点
于是花了半个小时多点 使用list来模拟人的各种行为就是了 注意各种条件的判断比如null 边界值 q>=length等
import java.util.ArrayList;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String arr[] = new String[n];
for (int i = 0; i < arr.length; i++) {
arr[i] = String.valueOf(sc.nextInt());
}
int k = 0;
String ans="";
while(k++!=n) {
ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < arr.length; i++) {
if(arr[i]!=null) list.add(arr[i]);
}
int q=0,max=-1;
while(list.size()!=1) {
max = -1;
for (int i = 0; i < list.size(); i++) {
if(q>=list.get(i).length()) {
ans += list.get(i);
list.clear();
}
if(list.get(i).charAt(q)-'0'>max)
max = list.get(i).charAt(q)-'0';
}
for (int i = 0; i < list.size(); i++) {
if(list.get(i).charAt(q)!=max+'0') {
list.remove(i);
i--;
}
}
q++;
}
if(!list.isEmpty()) {
ans += list.get(0);
for (int i = 0; i < arr.length; i++) {
if(arr[i]!=null&&arr[i].equals(list.get(0))) arr[i]=null;
}
}
}
System.out.println(ans);
}
}
//38'