趋势科技5,7笔试
第一题:约瑟夫环变种,K个人,每次淘汰从d开始d =(1,2,3,4,5...k)。想了下最优解无果,直接一把梭哈,下面是代码
package qushi;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class p1 {
public static int findIndex(List<Integer> result,int v){
int index = 0;
for(Integer tmp : result){
if(tmp == v){
return index;
}else{
index++;
}
}
return -1;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int k = in.nextInt();
int start = 0;
int dk = 1;
int len = k;
List<Integer> list = new LinkedList<>();
for(int i = 1 ;i <= k; i++){
list.add(i);
}
for(int i = 1 ;i <= k-1 ;i++){
int dz = (start+dk)%len;
// System.out.println("dz为"+dz);
// System.out.println("删除元素为"+list.get(dz));
// findIndex(list,list.get(dz+1));
int value = list.get((dz+1)%len);
list.remove(dz);
dk++;
len--;
start = findIndex(list,value);
}
// System.out.println("list长度"+list.size());
System.out.println(list.get(0));
}
}
package qushi;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class p2 {
static List<String> result = new LinkedList<>();
public static void solu(int index, int right,char res []){
int i = index-1;
int j = right+1;
String s = "";
if(right == index){
s+=res[index];
}else{
if(res[index] == res[right]){
s+=res[index];
s+=res[index];
}
}
while ( i >= 0 && j < res.length&&res[i] == res[j] ){
s = res[i]+s;
s = s +res[j];
i--;
j++;
}
if(s.length() > 1)result.add(s);
}
public static void Solutionh(char res []){
for(int i = 0;i < res.length-1; i++){
solu(i,i,res);
solu(i,i+1,res);
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String h = in.nextLine();
Solutionh(h.toCharArray());
int maxlen = -1;
if(result.isEmpty()){
System.out.println("null");
return;
}
for(String tmp : result){
if(tmp.length() > maxlen){
maxlen = tmp.length();
}
}
for(String tmp:result){
if(tmp.length() == maxlen){
System.out.println(tmp);
}
}
}
}
求大佬们的更优解。


CVTE公司福利 732人发布