1、
简单题,直接遍历一般即可。
import java.util.Scanner;
public class Main{
public static void main(String []args){
Scanner cin=new Scanner(System.in);
String s;
while(cin.hasNext()){
s=cin.nextLine();
int n=s.length();
char pre=s.charAt(0);
int ans=1;
String res="";
for(int i=1;i<n;i++){
char cur=s.charAt(i);
if(!((cur>='A'&&cur<='Z')||(cur>='a'&&cur<='z')))continue;
//System.out.println();
if(pre!=cur){
res+=pre;
res+=ans;
pre=cur;
ans=1;
}else
ans++;
}
res+=pre;
res+=ans;
System.out.println(res);
}
}
}
2、
栈的思想
- 如果遇到”(“,则入栈;
- 遇到”)”,则出栈;说明该盒子里没有礼物,则不打开。
- 遇到”A”,则跳出循环。
解即为栈的size。
import java.util.Scanner;
import java.util.Stack;
public class Test {
public static void main(String []args){
Scanner cin=new Scanner(System.in);
String s;
while(cin.hasNext()){
s=cin.nextLine();
int n=s.length();
int cnt=0;
Stack<String>stk=new Stack<String>();
for(int i=0;i<n;i++){
char tmp=s.charAt(i);
if(tmp==')')stk.pop();
else
if(tmp=='(')stk.push("(");
else
if(tmp=='A')break;
if(s.charAt(i)=='('&&s.charAt(i+1)!=')')cnt++;
else
if(s.charAt(i)=='A')break;
}
System.out.println(stk.size());
}
}
}
3、
贪心思想,这题因为提交次数过多,最后只拿到189,下面是最终修改的方法,应该正确了。
- 若mp>=10,则玩家使用魔法,直到玩家被消灭或者mp<10时,停止使用魔法;
- 否则,有两种情况,玩家要么一直使用普通攻击,要么选择恢复魔法;分别计算两种情况,直到玩家被消灭或者魔法恢复或者BOSS被消灭。
需要注意的时,玩家先玩。。。。
import java.util.Scanner;
public class Main{
static int min=Integer.MAX_VALUE;
public static void dfs(int hp1,int mp,int hp2,int cnt){
if(hp1<=0){
if(hp2<=0){
if(min>(cnt-1))min=cnt-1;
}
return ;
}
if(hp2<=0){
if(min>(cnt-1))min=cnt-1;
return ;
}
if(mp>=10){
int ans=mp/10;
int ans1=hp2%60!=0?hp2/60+1:hp2/60;
if(ans1<ans)ans=ans1;
int tmp=hp2;
for(int i=0;i<ans;i++){
if(cnt%5==0)hp1-=30;
else
hp1-=10;
cnt++;
if(hp1<=0)break;
tmp-=60;
}
dfs(hp1,mp-10*ans,tmp,cnt);
}else{
int hp=hp1;
int ans=hp2/17;
if(hp2%17!=0)ans++;
int tmp=hp2;
for(int i=0;i<ans;i++){
if(cnt%5==0)hp1-=30;
else
hp1-=10;
cnt++;
if(hp1<=0)break;
tmp-=17;
}
dfs(hp1,mp,tmp,cnt);
hp1=hp;
ans=(10-mp)/4;
if((10-mp)%4!=0)ans++;
for(int i=0;i<ans;i++){
if(cnt%5==0)hp1-=30;
else
hp1-=10;
cnt++;
if(hp1<=0)break;
mp+=4;
}
dfs(hp1,mp,hp2,cnt);
}
}
public static void main(String []args){
Scanner cin=new Scanner(System.in);
int hp1,mp,hp2;
while(cin.hasNext()){
hp1=cin.nextInt();
mp=cin.nextInt();
hp2=cin.nextInt();
min=Integer.MAX_VALUE;
dfs(hp1,mp,hp2,1);
if(min==Integer.MAX_VALUE)System.out.println(-1);
else
System.out.println(min);
}
}
}