牛客网华为机试题

1.汽水瓶

有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
输入描述:
输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。
输出描述:
对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。

//通过数学分析,最后获得的饮料数是总空瓶数整除2 。
while(line=readline()){
    console.log(parseInt(line/2))

}

2.简单密码

题目描述

密码是我们生活中非常重要的东东,我们的那么一点不能说的秘密就全靠它了。哇哈哈. 接下来渊子要在密码之上再加一套密码,虽然简单但也安全。

假设渊子原来一个BBS上的密码为zvbo9441987,为了方便记忆,他通过一种算法把这个密码变换成YUANzhi1987,这个密码是他的名字和出生年份,怎么忘都忘不了,而且可以明目张胆地放在显眼的地方而不被别人知道真正的密码。

他是这么变换的,大家都知道手机上的字母: 1--1, abc--2, def--3, ghi--4, jkl--5, mno--6, pqrs--7, tuv--8 wxyz--9, 0--0,就这么简单,渊子把密码中出现的小写字母都变成对应的数字,数字和其他的符号都不做变换,

声明:密码中没有空格,而密码中出现的大写字母则变成小写之后往后移一位,如:X,先变成小写,再往后移一位,不就是y了嘛,简单吧。记住,z往后移是a哦。

function simple_pwd(str11){
    var res=[]
for(var i=0;i='0'&&str11[i]<='9'){
        res[i]=str11[i];
        continue;
    }
    //处理大写字母

    else if(str11[i]>='A'&&str11[i]<='Z'){
        var t=str11[i].toLowerCase();
            if(t=='z'){
                res[i]='a';
            }else{
                res[i]=String.fromCharCode(t.charCodeAt()+1);   
            }

        continue;

    }
    //处理小写字母

    else if(str11[i]>='a'&&str11[i]<='c'){
                    res[i]='2';
                    continue;
                }else if(str11[i]>='d'&&str11[i]<='f'){
                    res[i]='3';
                    continue;
                }else if(str11[i]>='g'&&str11[i]<='i'){
                    res[i]='4';
                    continue;
                }else if(str11[i]>='j'&&str11[i]<='l'){
                    res[i]='5';
                    continue;
                }else if(str11[i]>='m'&&str11[i]<='o'){
                    res[i]='6';
                    continue;
                }else if(str11[i]>='p'&&str11[i]<='s'){
                    res[i]='7';
                    continue;
                }else if(str11[i]>='t'&&str11[i]<='v'){
                    res[i]='8';
                    continue;
                }else if(str11[i]>='w'&&str11[i]<='z'){
                    res[i]='9';
                    continue;
                }   

}
     return res.join("");

}

var line;
while(line=readline()){
    var str=line;
    var res=simple_pwd(str);
    console.log(res);
}

3.删除字符串中出现次数最少的字符

实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。

注意每个输入文件有多组输入,即多个字符串用回车隔开

function deletString(str2){
    arr2=str2.split('');
//reduce求出每个字符对应的个数
var result=arr2.reduce(function(allString,name){
    if(name in allString){
        allString[name]++;
    }
    else{
        allString[name]=1;
    }
    return allString;
},{});
//排序取最小值
var arr=Object.keys(result).sort(function(v1,v2){
    return result[v1]-result[v2]
})
//将满足条件的最小字符放入一个数组
var arr3=[]
var min=result[arr[0]]
for(var i=0;i

4.字符串排序

编写一个程序,将输入字符串中的字符按如下规则排序。

规则 1 :英文字母从 A 到 Z 排列,不区分大小写。

如,输入: Type 输出: epTy

规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。

如,输入: BabA 输出: aABb

规则 3 :非英文字母的其它字符保持原来的位置。
 

如,输入: By?e 输出: Be?y

注意有多组测试数据,即输入有多行,每一行单独处理(换行符隔开的表示不同行)

while(line=readline()){

var t=line.split('')
//对字母按照规则 1 :英文字母从 A 到 Z 排列,不区分大小写。
//规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。
var arr=line.match(/[a-zA-Z]/g);
for(i=0;iarr[j+1].toUpperCase()){
                tmp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=tmp;
            }
        }
    }
//规则 3 :非英文字母的其它字符保持原来的位置。
var count=-1;
var result=t.map(function(item){
    if(/[a-zA-Z]/.test(item)){
        count++;
        return arr[count];

    }else{
        return item;
    }
})

console.log(result.join(''));
}

5.线性插值

信号测量的结果包括测量编号和测量值。存在信号测量结果丢弃及测量结果重复的情况。

  

  1.测量编号不连续的情况,认为是测量结果丢弃。对应测量结果丢弃的情况,需要进行插值操作以更准确的评估信号。

  采用简化的一阶插值方法,由丢失的测量结果两头的测量值算出两者中间的丢失值。

  假设第M个测量结果的测量值为A,第N个测量结果的测量值为B。则需要进行(N-M-1)个测量结果的插值处理。进行一阶线性插值估计的第N+i个测量结果的测量值为A+( (B-A)/(N-M) )*i  (注:N的编号比M大。)

  例如:只有测量编号为4的测量结果和测量编号为7的测量结果,测量值分别为4和10

        则需要补充测量编号为5和6的测量结果。

         其中测量编号为5的测量值=4 + ((10-4)/(7-4))*1 = 6

         其中测量编号为6的测量值=4 + ((10-4)/(7-4))*2 = 8

  

      2.测量编号相同,则认为测量结果重复,需要对丢弃后来出现的测量结果。

  

  请根据以上规则进行测量结果的整理。

详细描述:

接口说明

原型:

intCleanUpMeasureInfo(MEASURE_INFO_STRUCT* pOriMeasureInfo,intnOriMINum,intnMaxMIRst, MEASURE_INFO_STRUCT* pMeasureInfoRst);

输入参数:

        MEASURE_INFO_STRUCT* pOriMeasureInfo:         原始测量结果内容,以结构数组方式存放。测量编号已经按升序排列。MEASURE_INFO_STRUCT定义包含编号和测量值,见OJ.h

          int nOriMINum:                                原始测量结果个数。

          int nMaxMIRst:                                整理的测量结果最大个数。

输入参数:

    MEASURE_INFO_STRUCT* pMeasureInfoRst:         整理的测量结果

返回值:

    Int

         整理的测量结果个数


import java.util.Scanner;
import java.util.ArrayList;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            int n=sc.nextInt();
            int m=sc.nextInt();
            //二维数组存储键值对
            int[][] data=new int[n][2];
            for(int i=0;i list=new ArrayList();
            //若出现重复值,利用这两个变量存储前一个值,丢弃后出现的重复值(如题目要求)
            int KEY=data[0][0];
            int VALUE=data[0][1];
            list.add(KEY+" "+VALUE);
            for(int i=1;i<=n-1;i++){
                int diff=data[i][0]-KEY-1;
                if(diff>0){
                    for(int j=1;j<=diff;j++){
                        int key=KEY+j;
                        int value=VALUE+(data[i][1]-VALUE)/(data[i][0]-KEY)*j;
                        list.add(key+" "+value);
                    }
                    list.add(data[i][0]+" "+data[i][1]);
                    KEY=data[i][0];
                    VALUE=data[i][1];
                //两个键相等则直接跳过,此时KEY,VVALUE保存的还是上一个值
                }else if(diff==-1)
                    continue;
                else{
                    list.add(data[i][0]+" "+data[i][1]);
                    KEY=data[i][0];
                    VALUE=data[i][1];
                }
            }
            for(String s:list)
                System.out.println(s);
        }
    }
}

6.合法IP

现在IPV4下用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此不需要用正号出现),如10.137.17.1,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字)。

现在需要你用程序来判断IP是否合法。

while(str = readline()){
    var arrNums = str.split(".");
    var res = "YES";
       
    for(var i=0;i255 || arrNums[i]<0) {
            res = "NO";
            break;
        }
    }
    console.log(res);
}

 

你可能感兴趣的:(牛客网华为机试题)