P1042 乒乓球(模拟,字符串,不指定输入,洛谷,java)

洛谷链接:https://www.luogu.com.cn/problem/P1042
借鉴链接:https://blog.csdn.net/a1439775520/article/details/90722794

P1042 乒乓球(模拟,字符串,不指定输入,洛谷,java)_第1张图片
P1042 乒乓球(模拟,字符串,不指定输入,洛谷,java)_第2张图片

注意:踩了坑,多输入了一个空行。又学会了一种不指定输入方法。

1.我原来的输入的方法

import java.util.Scanner;

public class Main {
   
    public static void main(String[] args) {
        
    	Scanner in=new Scanner(System.in);
        int l=0,one=0,tow=0,time=0;
        int[] win=new int[62503];
        
        while(in.hasNext()) {
        	String s=in.next();
        	//记录胜负
        	for(int i=0;i<s.length();i++) {
        		if(s.charAt(i)=='E') {
        			break;
        		}else {
        			if(s.charAt(i)=='W') {
        				win[l]=1;
        			}else {
        				win[l]=2;
        			}
        			l++;
        		}
        	}
        }
    	
        //11分制
        for(int i=0;;i++) {
        	if(win[i]==1) {one++;}  //胜场加1
        	if(win[i]==2) {tow++;}  //负场加1
        	if(win[i]==0) {
        		//到最后一段时
        		System.out.println(one+":"+tow);
        		System.out.println();
        		System.out.println();
        		break;
        	}
        	
        	if(Math.abs(one-tow)>=2) {
        		if(one>=11 || tow>=11) {
        			//当双方比分相差大于2且一方分数大等于11输出 
        			System.out.println(one+":"+tow);
        			one=0;    //比分清0
        			tow=0;   
        		}
        	}
        }
        
        //清零,为21分制计算做准备
        one=0;
        tow=0;
        
        //21分制
        for(int i=0;;i++) {
        	if(win[i]==1) {one++;}  //胜场加1
        	if(win[i]==2) {tow++;}  //负场加1
        	if(win[i]==0) {
        		//到最后一段时
        		System.out.print(one+":"+tow);
        		break;
        	}
        	
        	if(Math.abs(one-tow)>=2) {
        		if(one>=21 || tow>=21) {
        			//当双方比分相差大于2且一方分数大等于11输出 
        			System.out.println(one+":"+tow);
        			one=0;    //比分清0
        			tow=0;   
        		}
        	}
        }
       
    }
}

2.学习大佬的方法,定义可变String,一次性输入多行变成一个字符串

import java.util.Scanner;

public class Main {
   
    public static void main(String[] args) {
        
    	Scanner in=new Scanner(System.in);
        int l=0,one=0,tow=0,time=0;
        int[] win=new int[62503];
        StringBuilder s = new StringBuilder();
        
        do{
        	s.append(in.next());
        }while(s.indexOf("E")==-1);
    	
      //记录胜负
    	for(int i=0;i<s.length();i++) {
    		if(s.charAt(i)=='E') {
    			break;
    		}else {
    			if(s.charAt(i)=='W') {
    				win[i]=1;
    			}else {
    				win[i]=2;
    			}
    		}
    	}
    	
        //11分制
        for(int i=0;;i++) {
        	if(win[i]==1) {one++;}  //胜场加1
        	if(win[i]==2) {tow++;}  //负场加1
        	if(win[i]==0) {
        		//到最后一段时
        		System.out.println(one+":"+tow);
        		System.out.println();
        		break;
        	}
        	
        	if(Math.abs(one-tow)>=2) {
        		if(one>=11 || tow>=11) {
        			//当双方比分相差大于2且一方分数大等于11输出 
        			System.out.println(one+":"+tow);
        			one=0;    //比分清0
        			tow=0;   
        		}
        	}
        }
        
        //清零,为21分制计算做准备
        one=0;
        tow=0;
        
        //21分制
        for(int i=0;;i++) {
        	if(win[i]==1) {one++;}  //胜场加1
        	if(win[i]==2) {tow++;}  //负场加1
        	if(win[i]==0) {
        		//到最后一段时
        		System.out.print(one+":"+tow);
        		break;
        	}
        	
        	if(Math.abs(one-tow)>=2) {
        		if(one>=21 || tow>=21) {
        			//当双方比分相差大于2且一方分数大等于11输出 
        			System.out.println(one+":"+tow);
        			one=0;    //比分清0
        			tow=0;   
        		}
        	}
        }
       
    }
}

你可能感兴趣的:(算法题)