贝壳四道编程题(2020/09/07)

备战秋招面试,微信搜索公众号【TechGuide】关注更多新鲜好文和互联网大厂的笔经面经。
作者@TechGuide【全网同名】
点赞再看,养成习惯,您动动手指对原创作者意义非凡🤝

1、剪刀石头布

python实现

def win(b):
    wintimesleft,wintimesright=0,0
    if b[0]=="S" and "J" in b[2:]:
        wintimesleft+=1
    elif b[0]=="J" and "B" in b[2:]:
        wintimesleft+=1
    elif b[0]=="B" and "S" in b[2:]:
        wintimesleft+=1
    if b[1]=="S" and "J" in b[2:]:
        wintimesright+=1
    elif b[1]=="J" and "B" in b[2:]:
        wintimesright+=1
    elif b[1]=="B" and "S" in b[2:]:
        wintimesright+=1
    if wintimesleft>wintimesright:
        print("left")
    elif wintimesleft==wintimesright:
        print("same")
    else:
        print("right")

while True:
    try:
        T=int(input())
        index=0
        a=[]
        while index<T:
            a.append(input().split(" "))
            index+=1
        for line in a:
            win(line)
    except:
        break
        
#作者:牛客463320147号
#链接:https://www.nowcoder.com/discuss/501925?#type=6&channel=666&source_id=discuss_center_discuss_hot
#来源:牛客网

java实现

import java.util.*;

public class zbr01
{
	public static int n,m;
	public static int []arr=new int[100005];
	public static int []b=new int[100005];
	
	public static void main(String[] args)
	{
		Scanner S=new Scanner(System.in);
		int T=S.nextInt();
		for(int z=1;z<=T;z++)
		{
			String s=S.next(); char a=s.charAt(0);
			s=S.next(); char b=s.charAt(0);
			s=S.next(); char c=s.charAt(0);
			s=S.next(); char d=s.charAt(0);
			
			int x1=0,x2=0;
			if(a=='J'&&d=='B'||a=='J'&&c=='B') x1++;
			if(a=='S'&&d=='J'||a=='S'&&c=='J') x1++;
			if(a=='B'&&d=='S'||a=='B'&&c=='S') x1++;
			
			if(b=='J'&&d=='B'||b=='J'&&c=='B') x2++;
			if(b=='S'&&d=='J'||b=='S'&&c=='J') x2++;
			if(b=='B'&&d=='S'||b=='B'&&c=='S') x2++;
			
			if(x1==x2) System.out.println("same");
			else if(x1>x2) System.out.println("left");
			else System.out.println("right");
		}
	}
}

2、构造字符串,本质是求最长重复子串

import java.util.*;

public class Solution {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n =  in.nextInt();
        String str = in.next();
        if(n<=2){
            System.out.println(n);
            return;
        }
        int mid = n/2;
        for (int i = mid; i >1; i--) {
            if(canCopy(str,i)){
                System.out.println(n+1-i);
                return;
            }
        }
        System.out.println(n);
    }

    private static boolean canCopy(String str, int mid) {
        for (int i = 0; i < mid; i++) {
            char c1 = str.charAt(i);
            char c2 =str.charAt(i+mid);
            if(c1 != c2) return false;
        }
        return true;
    }
}

作者:tianyikun
链接:https://www.nowcoder.com/discuss/501925?type=6&channel=666&source_id=discuss_center_discuss_hot
来源:牛客网

3,涂栅栏方案数

import java.util.*;

public class zbr01
{
	public static int n,m,k;
	
	public static long mod=1000000007;
	public static long [][]dp=new long [1005][15];
	public static int [][]p=new int [15][15];
	
	public static void main(String[] args)
	{
		Scanner S=new Scanner(System.in);
		int T=S.nextInt();
		for(int z=1;z<=T;z++)
		{
			n=S.nextInt(); m=S.nextInt(); k=S.nextInt();
			
			for(int i=1;i<=m;i++) for(int j=1;j<=m;j++) p[i][j]=0;
			for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) dp[i][j]=0;
			
			for(int i=1;i<=m;i++)
			{
				for(int j=1;j<=k;j++)
				{
					int x=S.nextInt();
					p[i][x]=1;
				}
			}
			
			for(int i=1;i<=m;i++) dp[1][i]=1;
			long ans=0;
			
			for(int i=2;i<=n;i++)
			{
				for(int j=1;j<=m;j++)
				{
					for(int k=1;k<=m;k++)
					{
						if(p[j][k]==1) continue;
						dp[i][k]=(dp[i-1][j]+dp[i][k])%mod;
					}
				}
			}
			for(int i=1;i<=m;i++) ans=(ans+dp[n][i])%mod;
			System.out.println(ans);
		}
	}
}

4,打怪初始血量

import java.util.*;

public class zbr01
{
	public static int []a1=new int[1005];
	public static int []a2=new int[1005];
	public static int []b1=new int[1005];
	public static int []b2=new int[1005];
	public static int []pa1=new int[1005];
	public static int []pa2=new int[1005];
	public static int []pb1=new int[1005];
	public static int []pb2=new int[1005];
	
	public static int [][]dp=new int[1005][1005];
	
	public static int inf=2000000001;
	
	public static void main(String[] args)
	{
		Scanner S=new Scanner(System.in);
		int n=S.nextInt();
		for(int i=n;i>=1;i--) a1[i]=S.nextInt();
		for(int i=1;i<=n;i++) {a2[i]=S.nextInt(); pa2[i]=pa2[i-1]+a2[i];}
		for(int i=n;i>=1;i--) b1[i]=S.nextInt();
		for(int i=1;i<=n;i++) {b2[i]=S.nextInt(); pb2[i]=pb2[i-1]+b2[i];}
		
		for(int i=1;i<=n;i++) {pa1[i]=pa1[i-1]+a1[i]; pb1[i]=pb1[i-1]+b1[i];}
		
		for(int i=0;i<=n;i++) for(int j=0;j<=n;j++) dp[i][j]=inf; dp[0][0]=0;
		
		for(int i=0;i<=n;i++) for(int j=0;j<=n;j++)
		{
			if(i>=1)
			{
				int res=dp[i-1][j];
				res-=pa1[i-1]; res+=pb1[i-1]; res-=pa2[j]; res+=pb2[j];
				if(res>=a1[i]) dp[i][j]=Math.min(dp[i][j],dp[i-1][j]);
				else dp[i][j]=Math.min(dp[i][j],dp[i-1][j]+(a1[i]-res));
			}
			
			if(j>=1)
			{
				int res=dp[i][j-1];
				res-=pa1[i]; res+=pb1[i]; res-=pa2[j-1]; res+=pb2[j-1];
				if(res>=a2[j]) dp[i][j]=Math.min(dp[i][j],dp[i][j-1]);
				else dp[i][j]=Math.min(dp[i][j],dp[i][j-1]+(a2[j]-res));
			}
		}
		System.out.println(dp[n][n]+1);
	}
}

阅读题目可以查看原文链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值