牛客网NC18、12-20.8.2-模拟、递推

NC18
题目链接:NC18
题意、输入、输出
牛客网NC18、12-20.8.2-模拟、递推_第1张图片
分析:模拟,从将开始或者其他棋子判断都行
思路:无
代码

import java.util.*;


public class Solution {
    /**
     * 
     * @param chessboard string字符串一维数组 
     * @return string字符串
     */
    public String playchess (String[] chessboard) {
        // write code here
        String[] ch=chessboard;
        String ans1="Happy";
        String ans2="Sad";
        for(int i=0;i<ch.length;i++){
            for(int j=0;j<ch[i].length();j++){
                if(ch[i].charAt(j)=='.')continue;
                switch(ch[i].charAt(j)){
                    case 'P':
                        int cnt=0;
                        for(int k=i+1;k<ch.length;k++){
                            if(ch[k].charAt(j)=='j'&&cnt==1)return ans1;                            
                            if(ch[k].charAt(j)!='.')cnt++;
                            if(cnt==2)break;
                        }
                        cnt=0;
                        for(int k=i-1;k>=0;k--){
                            if(ch[k].charAt(j)=='j'&&cnt==1)return ans1;
                            if(ch[k].charAt(j)!='.')cnt++;
                            if(cnt==2)break;
                        }
                        cnt=0;
                        for(int k=j+1;k<ch[i].length();k++){
                            if(ch[i].charAt(k)=='j'&&cnt==1)return ans1;
                            if(ch[i].charAt(k)!='.')cnt++;
                            if(cnt==2)break;
                        }
                        cnt=0;
                        for(int k=j-1;k>=0;k--){
                            if(ch[i].charAt(k)=='j'&&cnt==1)return ans1;
                            if(ch[i].charAt(k)!='.')cnt++;
                            if(cnt==2)break;
                        }
                        break;
                    case 'C':
                        for(int k=i+1;k<ch.length;k++){
                            if(ch[k].charAt(j)!='.'){
                                if(ch[k].charAt(j)=='j')return ans1;
                                else break;
                            }
                        }
                        for(int k=i-1;k>=0;k--){
                            if(ch[k].charAt(j)!='.'){
                                if(ch[k].charAt(j)=='j')return ans1;
                                else break;
                            }
                        }
                        for(int k=j+1;k<ch[i].length();k++){
                            if(ch[i].charAt(k)!='.'){
                                if(ch[i].charAt(k)=='j')return ans1;
                                else break;
                            }
                        }
                        for(int k=j-1;k>=0;k--){
                            if(ch[i].charAt(k)!='.'){
                                if(ch[i].charAt(k)=='j')return ans1;
                                else break;
                            }
                        }
                        break;
                    case 'B':
                        if(i+1<ch.length&&ch[i+1].charAt(j)=='j'
                          ||i-1>=0&&ch[i-1].charAt(j)=='j'
                          ||j+1<ch[i].length()&&ch[i].charAt(j+1)=='j'
                          ||j-1>=0&&ch[i].charAt(j-1)=='j')return ans1;
                        break;
                    case 'J':
                        if(i+1<ch.length&&ch[i+1].charAt(j)=='j'
                          ||i-1>=0&&ch[i-1].charAt(j)=='j'
                          ||j+1<ch[i].length()&&ch[i].charAt(j+1)=='j'
                          ||j-1>=0&&ch[i].charAt(j-1)=='j')return ans1;
                }
            }
        }
        return ans2;
    }
}

NC12
题目链接:NC12
题意、输入、输出
牛客网NC18、12-20.8.2-模拟、递推_第2张图片
分析:从后往前递推,但取余数我想不明白,
思路:递推(说是dp,但dp就是浪费实干)
代码

import java.util.*;


public class Solution {
    /**
     * 
     * @param n int整型 只剩下一只蛋糕的时候是在第n天发生的.
     * @return int整型
     */
    static int[] dp=new int[30];
    static {
        dp[0]=1;
    }
    public int cakeNumber (int n) {
        // write code here\
        if(dp[n-1]!=0)return dp[n-1];
        for(int i=1;i<n;i++){
            if(dp[i]!=0)continue;
            dp[i]=(dp[i-1]+1)*3/2;
        }
        return dp[n-1];
        
    }
}

你可能感兴趣的:(每日一题)