字節跳動筆試練習題


鏈接:https://www.nowcoder.com/questionTerminal/944e5ca0ea88471fbfa73061ebe95728?orderByHotValue=1&mutiTagIds=665&page=1&onlyReference=false
來源:牛客網

Z國的貨幣系統包含面值1元、4元、16元、64元共計4種硬幣,以及面值1024元的紙幣。現在小Y使用1024元的紙幣購買了一件價值為 N(0<N≤1024)N (0 < N \le 1024)N(0<N1024)的商品,請問最少他會收到多少硬幣?
w=int(input())
n=1024-w
count=0
if int(n/64)>0:
        count=count+int(n/64)
        n=n%64
if int(n/16)>0:
        count=count+int(n/16)
        n=n%16 
if int(n/4)>0:    
        count=count+int(n/4)
        n=n%4
count=count+n
print(count)     

 鏈接:https://www.nowcoder.com/questionTerminal/5afcf93c419a4aa793e9b325d01957e2?orderByHotValue=1&mutiTagIds=665&page=1&onlyReference=false
來源:牛客網

小明是一名算法工程師,同時也是一名鏟屎官。某天,他突發奇想,想從貓咪的視頻里挖掘一些貓咪的運動信息。為了提取運動信息,他需要從視頻的每一幀提取“貓咪特征”。一個貓咪特征是一個兩維的vector<x, y>。如果x_1=x_2 and y_1=y_2,那么這倆是同一個特征。
       因此,如果喵咪特征連續一致,可以認為喵咪在運動。也就是說,如果特征<a, b>在持續幀里出現,那么它將構成特征運動。比如,特征<a, b>在第2/3/4/7/8幀出現,那么該特征將形成兩個特征運動2-3-4 和7-8。
現在,給定每一幀的特征,特征的數量可能不一樣。小明期望能找到最長的特征運動。
n=input()
m=int(input())
dict1={}
max1={}
max2={}
for j in range(0,m):
    xy=[]
    temp=[]
    v1=[int(x) for x in  input().strip().split()]
    for i in range(0,v1[0]):
        x1=str(v1[2*i+1])
        y1=str(v1[2*i+2])
        x1y1=x1+"_"+y1
        if x1y1 in max1.keys():#如果已經保存該特征值
             max1[x1y1]=max1.get(x1y1)+1
        else: 
            max1[x1y1]=1
            if x1y1 not in max2:
                max2[x1y1]=1
        xy.append(x1y1)
    if j!=0:
        for k in max1.keys():
            if k not in xy:
                if max1.get(k)>max2.get(k):
                    max2[k]=max1.get(k)
                temp.append(k)
        for k in temp:
            max1.pop(k)
for k in max1.keys():
    if max1.get(k)>max2.get(k):
        max2[k]=max1.get(k)
max3=[]
for c in max2.keys():
   max3.append(max2.get(c))
   #print(c,",",max2.get(c))
print(max(max3))

 

為給定的二維平面整數點集。定義 P 中某點x,如果x滿足 P 中任意點都不在 x 的右上方區域內(橫縱坐標都大於x),則稱其為“最大的”。求出所有“最大的”點的集合。(所有點的橫坐標和縱坐標都不重復, 坐標軸范圍在[0, 1e9) 內)

如下圖:實心點為滿足條件的點的集合。請實現代碼找到集合 P 中的所有 ”最大“ 點的集合並輸出。 

n=int(input())
point={}
max1={}
for i in range(0,n):
    v1=[int(x) for x in input().split()]
    point[v1[0]]=v1[1]
for k in point.keys():
    iss=True
    for h in point.keys():
        if h>k and point.get(h)>point.get(k):
            iss=False
    if iss==True:
        max1[k]=point.get(k)
keyy=[]
for d in max1.keys():
    keyy.append(d)
keyy=sorted(keyy)
for dd in keyy:
    print(dd,max1.get(dd))
    
        
   

 

給定一個數組序列, 需要求選出一個區間, 使得該區間是所有區間中經過如下計算的值最大的一個:

區間中的最小數 * 區間所有數的和最后程序輸出經過計算后的最大值即可,不需要輸出具體的區間。如給定序列  [6 2 1]則根據上述公式, 可得到所有可以選定各個區間的計算值:

 

[6] = 6 * 6 = 36;

[2] = 2 * 2 = 4;

[1] = 1 * 1 = 1;

[6,2] = 2 * 8 = 16;

[2,1] = 1 * 3 = 3;

[6, 2, 1] = 1 * 9 = 9;

 

從上述計算可見選定區間 [6] ,計算值為 36, 則程序輸出為 36。

區間內的所有數字都在[0, 100]的范圍內; 

n=int(input())
v1=[int(x) for x in input().split()]
result=[]
for i in range(0,n):
    min1=0
    sum1=0
    for  j in range(i,n):
        min1=min(v1[i:j+1])
        sum1=sum(v1[i:j+1])
        result.append(min1*sum1)
print(max(result))

 

 

package test;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class test {

    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int n=scanner.nextInt();
        int[] v2=new int[n];
        for(int i=0;i<n;i++) {
            v2[i]=Integer.valueOf(scanner.next());
        }
        List<Integer> result=new ArrayList<Integer>();
        for(int i=0;i<n;i++) {
            for(int j=i;j<n;j++) {
                result.add(getmin(v2,i,j)*getsum(v2,i,j));
            }
        }
        System.out.print(getmax(result));
        

    }
    
    public static int getmin(int[] n,int start,int end) {
        int min1=n[start];
        for(int i=start;i<end+1;i++) {
            if(n[i]<min1) {
                min1=n[i];
            }
        }
        return min1;
        
    }
    public static int getmax(List<Integer> n) {
        int min1=n.get(0);
        for(int i:n) {
            if(i>min1) {
                min1=i;
            }
        }
        return min1;
        
    }
    public static int getsum(int[] n,int start,int end) {
        int sum=0;
        for(int i=start;i<end+1;i++) {
            sum=sum+n[i];
        }
        return sum;
        
    }

}

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM