锵锵!我又回来了~现在来做第二章吧!
小二,上代码? 2.1 队列-破解密码
static class list{
int[] num=new int[100];
int start;
int end;
}
public static void main(String[] args){
list l=new list();
/*l.num=new int[100]; 提前赋值
l.num[0]=6;
l.num[1]=3;
l.num[2]=1;
l.num[3]=7;
l.num[4]=5;
l.num[5]=8;
l.num[6]=9;
l.num[7]=2;
l.num[8]=4;*/
//6 3 1 7 5 8 9 2 4
Scanner sc=new Scanner(System.in);//键盘输入
for(int i=0;i<9;i++)
l.num[i]=sc.nextInt();
l.start=0;
l.end=9;
while(l.start<l.end){
System.out.println(l.num[l.start]);
l.start++;
l.num[l.end]=l.num[l.start];
l.end++;
l.start++;
}
}
第二个代码,因为书上已经有栈的字符匹配代码了,不如做一做作者让我们尝试的括号匹配,三种类型的括号:{},组合成一个字符串,问能否完全匹配。
2.2 括号匹配
public boolean BracketMatching(){
Scanner sc=new Scanner(System.in);
int N=sc.nextInt();
String s=sc.next();
char[] n=new char[N];
for(int i=0;i<N;i++)
n[i]=s.charAt(i);
Stack<Character> stack=new Stack<Character>();
for(int i=0;i<N;i++){
if(n[i]=='('||n[i]=='{'||n[i]=='[')
stack.push(n[i]);
if(n[i]==')'){ //三种括号,三种情况
if(stack.peek()!='(')
return false;
stack.pop();
}
if(n[i]=='}'){
if(stack.peek()!='{')
return false;
stack.pop();
}
if(n[i]==']'){
if(stack.peek()!='[')
return false;
stack.pop();
}
}
if(stack.size()==0) return true;
else return false;
}
到这里为止还算顺利,那么就继续前进吧~
2.3 小猫钓鱼游戏
太难过了,太难过了,我愿用我10年欧气换我的Java程序不出异常orz(你有欧气嘛喂!)太难过啦!!为什么同样的程序步骤C不会报异常Java就在那边报报报报报报报——疯掉了!
class list{
int[] card=new int[100];
int start;
int end;
}
class stack{
int[] data=new int[100];
int top;
}
public void turn(int t,list l,stack s,int[] flag){
if(flag[l.card[l.start]]==0)//赢不了牌
{
s.top++;
s.data[s.top]=t;
l.start++;
flag[t]=1;
}
else{//赢牌啦
l.card[l.end++]=t;
l.start++;
while(t!=s.data[s.top]){
flag[s.data[s.top]]=0;
l.card[l.end++]=s.data[s.top];
s.top--;
}
}
}
public void printCards(list l,stack s){
int i=l.start;
while(i<l.end){
System.out.println(l.card[i]);//输出玩家的牌
i++;
}
int k=1;
while(k<=s.top){
System.out.println(s.data[k]);
k++;//输出桌面上的牌
}
}
public void Catfishing(){
list l1=new list();
list l2=new list();
stack s=new stack();
l1.start=0;
l1.end=0;
l2.start=0;
l2.end=0;
s.top=0;
//发牌
Scanner sc=new Scanner(System.in);
int N=sc.nextInt();//首先,一人多少张牌
for(int i=0;i<N;i++){
l1.card[l1.end++]=sc.nextInt();
}
for(int i=0;i<N;i++){
l2.card[l2.end++]=sc.nextInt();
}
int[] flag=new int[10];
for(int i=0;i<=9;i++)
flag[i]=0;//没有数值为i的牌
//开始出牌
while(l1.start<l1.end&&l2.start<l2.end){
int t=l1.card[l1.start];
turn(t,l1,s,flag);//小哼先出牌
int m=l2.card[l2.start];
turn(m,l2,s,flag);//小哈出牌
}
if(l1.start==l1.end)//哎呀,小哼输了
{
System.out.println("小哈赢了");
printCards(l2, s);
}
if(l2.start==l2.end)//小哈输了
{
System.out.println("小哼赢了");
printCards(l1, s);
}
}
public static void main(String[] args){
algorithm test=new algorithm();
test.Catfishing();
}
终于搞定了,差不多要跪在这道题上面了!
本来预计第二章一次性完结的,剩下的晚上补吧~