五子棋题目
牛客上一个比较有意思的思路,只需要判断四个方向
代码
import java.util.*;
public class Main{
public static boolean is(char [][]map){
for(int i=0;i<20;i++){
for(int j=0;j<20;j++){
if(map[i][j]=='.'){
continue;
}
int right = 1,down = 1,right_down = 1,left_down = 1;
for(int k=1;k<5;k++){
if(j<16&&map[i][j]==map[i][j+k]){
right++;
}
if(i<16&&map[i][j]==map[i+k][j]){
down++;
}
if(i<16&&j<16&&map[i][j]==map[i+k][j+k]){
right_down++;
}
if(i<16&&j>3&&map[i][j]==map[i+k][j-k]){
left_down++;
}
}
if(left_down==5||right==5||down==5||right_down==5){
return true;
}
}
}
return false;
}
public static void main(String[]args){
char[][]map=new char[20][20];
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
for(int i=0;i<20;i++){
String s=sc.next();
for(int j=0;j<20;j++){
map[i][j]=s.charAt(j);
}
}
if(is(map)){
System.out.println("Yes");
}else{
System.out.println("No");
}
}
}
}
逆波兰表达式 计算器
// write your code here
import java.util.*;
public class Main{
public static void main(String[]args){
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int num=Integer.parseInt(sc.nextLine());
String[]arr=sc.nextLine().split(" ");
int res=0;
Stack<String>stack=new Stack<>();
for(int i=0;i<num;i++){
if(!arr[i].equals("+")&&!arr[i].equals("-")&&!arr[i].equals("*")&&!arr[i].equals("/")){
stack.push(arr[i]);
}else{
int num1=Integer.parseInt(stack.pop());
int num2=Integer.parseInt(stack.pop());
if(arr[i].equals("+")){
res=num1+num2;
}
if(arr[i].equals("-")){
res=num2-num1;
}
if(arr[i].equals("*")){
res=num1*num2;
}
if(arr[i].equals("/")){
res= num2/ num1;
}
stack.push(String.valueOf(res));
}
}
System.out.println(stack.pop());
}
}
}