第一题要求写在纸上的大写字母字符串,把纸翻过来一样,也就是回文数,然后+判断字母是否对称
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(true){
String str=sc.next();
char a[]=str.toCharArray();
int l=0;
int r=a.length-1;
int k=0;
while(l<=r){
if(a[l]==a[r]){
if(a[l]=='A'||a[l]=='H'||a[l]=='X'||a[l]=='V'||a[l]=='M'||a[l]=='W'||a[l]=='T'||a[l]=='Y'||a[l]=='U'||a[l]=='I'||a[l]=='O'){
l++;
r--;
}else{
k=1;
break;
}
}else{
k=1;
break;
}
}
if(k==1){
System.out.println("NO");
}
else{
System.out.println("YES");
}
}
}
} 第二题闯关游戏,输入一个数,表示有n组数据,每组数据第一个是该关卡有多少积分,第二个0 1表示是否有宝盒。宝盒打开就当前累计积分翻倍,不打开就累加当前关卡的积分。求积分最大
思路:先闯所有没宝盒的,再去闯有宝盒的
在判断要不要打开宝盒
唯一注意累计积分可能会溢出,应使用long
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m=sc.nextInt();
long count=0;
int k=0;
int a[]=new int[m];
for(int i=0;i<m;i++){
int x=sc.nextInt();
int y=sc.nextInt();
if(y==0){
count+=x;
}else{
a[k]=x;
k++;
}
}
int b[]= Arrays.copyOfRange(a,0,k);
Arrays.sort(b);
while(k>0){
k--;
if(count*2>b[k]+count){
count*=2;
}else{
count+=b[k];
}
}
System.out.println(count);
}
}

全部评论
(0) 回帖