华为机试在线编程(二)

1、题目描述
开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。
处理: 
1、 记录最多8条错误记录,循环记录,对相同的错误记录(净文件名称和行号完全匹配)只记录一条,错误计数增加;
2、 超过16个字符的文件名称,只记录文件的最后有效16个字符;
3、 输入的文件可能带路径,记录文件名称不能带路径。
输入描述:
一行或多行字符串。每行包括带路径文件名称,行号,以空格隔开。
输出描述:
将所有的记录统计并将结果输出,格式:文件名 代码行数 数目,一个空格隔开,如:
输入
E:\V1R2\product\fpgadrive.c   1325
输出
fpgadrive.c 1325 1
答案:
function errorRecord(...dataArr){
	var errorArr=[];
	var obj={};
	for(var i=0;i
补充:有人说这道题巨坑,确实巨坑啊。。。各种输入错误!!!
2、题目描述
密码要求:
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有相同长度超过2的子串重复
输入描述:
一组或多组长度超过2的子符串。每组占一行
输出描述:
如果符合要求输出:OK,否则输出NG
输入
021Abc9000
021Abc9Abc1
021ABC9000
021$bc9000
输出
OK
NG
NG
OK
答案:
function checkPas(...dataArr){
	var resultArr=[];
	for(var i=0;i=48&&code<=57) {
					flag1=true;
					count++;
				}
			}
			if (!flag2) {
				if (code>=97&&code<=122) {
					flag2=true;
					count++;
				}
			}
			if (!flag3) {
				if (code>=65&&code<=90) {
					flag3=true;
					count++;
				}
			}
			if (!flag4) {
				if (code<48||code>=58&&code<=64||code>=91&&code<=96||code>122) {
					flag4=true;
					count++;
				}
			}
		}
		//条件二
		if (count<3) {
			resultArr[i]="NG";
			continue;
		}
		//条件三
		var item=dataArr[i];
		for(var m=0;m
注意:indexOf()和lastIndexOf()是字符串方法;slice()和concat()既是字符串方法又是数组方法;
3、题目描述
密码是我们生活中非常重要的东东,我们的那么一点不能说的秘密就全靠它了。哇哈哈. 接下来渊子要在密码之上再加一套密码,虽然简单但也安全。
假设渊子原来一个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哦。
输入描述:
输入包括多个测试数据。输入是一个明文,密码长度不超过100个字符,输入直到文件结尾
输出描述:
输出渊子真正的密文
输入
YUANzhi1987
输出
zvbo9441987
答案:
function getPassward(...dataArr){
	var resultArr=[];
	for(var i=0;i=65&&code<=90) {
				code=code+32+1;
				if (code>122) {
					code=code-26;
				}
				resultArr.push(String.fromCharCode(code));
				continue;
			}
			if (code>=97&&code<=122) {
				switch(code){
					case 97:case 98:case 99:resultArr.push(2);break;
					case 100:case 101:case 102:resultArr.push(3);break;
					case 103:case 104:case 105:resultArr.push(4);break;
					case 106:case 107:case 108:resultArr.push(5);break;
					case 109:case 110:case 111:resultArr.push(6);break;
					case 112:case 113:case 114:case 115:resultArr.push(7);break;
					case 116:case 117:case 118:resultArr.push(8);break;
					case 119:case 120:case 121:case 122:resultArr.push(9);break;
				}
			}
			if (code<65||code>90&&code<97||code>122) {
				resultArr.push(item[j]);
			}
		}
	}
	return resultArr.join("");
}
console.log(getPassward("YUANzhi1987"));
说明:String.fromCharCode(),字符串方法,用来将ascll码转换成字符串。
4、题目描述
有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝? 
输入描述:
输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。
输出描述:
对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。
输入
3
10
81
0
输出
1
5
40
答案:
function getSoda(...dataArr){
	var sodaArr=[];
	for(var i=0;i=3) {
			temp=parseInt(n/3);
			n%=3;
			count+=temp;
			n+=temp;
		}
		if (n==2) {
			count++;
		}
		sodaArr.push(count);
	}
	return sodaArr;
}
console.log(getSoda("3","10","81","0"));
说明:注意取整!!!
5、题目描述
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。 
输入描述:
字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。
输出描述:
删除字符串中出现次数最少的字符后的字符串。
输入
abcdd
输出
dd
答案:
function delRepStr(str){
	let [obj,newArr,min]=[{},[],0];
	var arr=str.split("");
	for(var i=0;i
6、题目描述
计算最少出列多少位同学,使得剩下的同学排成合唱队形
说明:
N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。 
合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK,则他们的身高满足存在i(1<=i<=K)使得T1Ti+1>......>TK。 
你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。 
输入描述:
整数N
输出描述:
最少需要几位同学出列
输入
8
186 186 150 200 160 130 197 200
输出
4
答案:
function sort(n,...dataArr){
	var max=Math.max(...dataArr);
	var index=0;
	for(var i=0;i=dataArr[i+1]) {
				dataArr.splice(i,1);
				i--;
				continue;
			}
		}
		if (i>index) {
			if (dataArr[i]<=dataArr[i+1]) {
				dataArr.splice(i+1,1);
				i--;
			}
		}
	}
	return n-dataArr.length;
}
console.log(sort(8,186,186,150,200,160,130,197,200));
7、题目描述
信息社会,有海量的数据需要分析处理,比如公安局分析身份证号码、 QQ 用户、手机号码、银行帐号等信息及活动记录。  
采集输入大数据和分类规则,通过大数据分类处理程序,将大数据分类输出。
输入描述:
?一组输入整数序列I和一组规则整数序列R,I和R序列的第一个整数为序列的个数(个数不包含第一个整数);整数范围为0~0xFFFFFFFF,序列个数不限
输出描述:
?从R中依次取出R,对I进行处理,找到满足条件的I: 
I整数对应的数字需要连续包含R对应的数字。比如R为23,I为231,那么I包含了R,条件满足 。 
按R从小到大的顺序:
(1)先输出R; 
(2)再输出满足条件的I的个数; 
(3)然后输出满足条件的I在I序列中的位置索引(从0开始); 
(4)最后再输出I。 
附加条件: 
(1)R需要从小到大排序。相同的R只需要输出索引小的以及满足条件的I,索引大的需要过滤掉 
(2)如果没有满足条件的I,对应的R不用输出 
(3)最后需要在输出序列的第一个整数位置记录后续整数序列的个数(不包含“个数”本身)
序列I:15,123,456,786,453,46,7,5,3,665,453456,745,456,786,453,123(第一个15表明后续有15个整数) 
序列R:5,6,3,6,3,0(第一个5表明后续有5个整数) 
输出:30, 3,6,0,123,3,453,7,3,9,453456,13,453,14,123,6,7,1,456,2,786,4,46,8,665,9,453456,11,456,12,786
说明:
30----后续有30个整数
3----从小到大排序,第一个R为0,但没有满足条件的I,不输出0,而下一个R是3
6--- 存在6个包含3的I 
0--- 123所在的原序号为0 
123--- 123包含3,满足条件 
输入
15 123 456 786 453 46 7 5 3 665 453456 745 456 786 453 123
5 6 3 6 3 0
输出
30 3 6 0 123 3 453 7 3 9 453456 13 453 14 123 6 7 1 456 2 786 4 46 8 665 9 453456 11 456 12 786
答案:
function handleData(...dataArr){
	//获取数据
	var In=dataArr[0].split(" ")[0];
	var IArr=dataArr[0].split(" ").slice(1);
	var Rn=dataArr[1].split(" ")[0];
	var RArr=dataArr[1].split(" ").slice(1);
	// console.log(In)
	// console.log(IArr)
	// console.log(Rn)
	// console.log(RArr)
	//去重
	RArr.sort();
	var arr=[RArr[0]];
	for(var i=1;i

你可能感兴趣的:(在线编程【剑指offer,华为机试】)