有无佬看看我这为啥错了,测试用例都没问题,但是通过率为0,用的三数之和双指针法加一个set判断
···import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int T=in.nextInt();
while(T-->0){
boolean found=false;
int n=in.nextInt();
int Dn=in.nextInt();
Set<Integer> Dset=new HashSet<>();//用来快速判断是否在D中
for(int i=0;i<Dn;i++){
Dset.add(in.nextInt());
}
for(int a=1;a<=24;a++){
int b=a+1;
int c=26;
if(a>=n) break;
while(b<c){
if(a+b+c>n){
c--;
}else if(a+b+c<n){
b++;
}else{
//否则找到了
if(Dset.contains(b-a)&&Dset.contains(c-b)){
char a1=(char)('a'+(a-1));
char b1=(char)('a'+(b-1));
char c1=(char)('a'+(c-1));
System.out.print(a1);
System.out.print(b1);
System.out.println(c1);
found=true;
break;
}
//否则是找到了但是此时的a下面的b和c并不满足
b++;
c--;
}
}
}
if(found==false) System.out.println("NO");
}
}
}
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int T=in.nextInt();
while(T-->0){
boolean found=false;
int n=in.nextInt();
int Dn=in.nextInt();
Set<Integer> Dset=new HashSet<>();//用来快速判断是否在D中
for(int i=0;i<Dn;i++){
Dset.add(in.nextInt());
}
for(int a=1;a<=24;a++){
int b=a+1;
int c=26;
if(a>=n) break;
while(b<c){
if(a+b+c>n){
c--;
}else if(a+b+c<n){
b++;
}else{
//否则找到了
if(Dset.contains(b-a)&&Dset.contains(c-b)){
char a1=(char)('a'+(a-1));
char b1=(char)('a'+(b-1));
char c1=(char)('a'+(c-1));
System.out.print(a1);
System.out.print(b1);
System.out.println(c1);
found=true;
break;
}
//否则是找到了但是此时的a下面的b和c并不满足
b++;
c--;
}
}
}
if(found==false) System.out.println("NO");
}
}
}
全部评论
不会是因为第二层循环没break吧,多输出了答案?


相关推荐