样题-初级题:从考试成绩中划出及格线
10个学生考完期末考试评卷完成后,A老师需要划出及格线,要求如下:
(1) 及格线是10的倍数;
(2) 保证至少有60%的学生及格;
(3) 如果所有的学生都高于60分,则及格线为60分
样题-中级题:亮着电灯的盏数
一条长廊里依次装有n(1 ≤ n ≤ 65535)盏电灯,从头到尾编号1、2、3、…n-1、n。每盏电灯由一个拉线开关控制。开始,电灯全部关着。
有n个学生从长廊穿过。第一个学生把号码凡是1的倍数的电灯的开关拉一下;接着第二个学生把号码凡是2的倍数的电灯的开关拉一下;接着第三个学生把号码凡是3的倍数的电灯的开关拉一下;如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下。n个学生按此规定走完后,长廊里电灯有几盏亮着。
注:电灯数和学生数一致。
样题-高级题:地铁换乘
已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。经过的站点名分别如下,两条线交叉的换乘点用T1、T2表示。编写程序,任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次)。
地铁线A(环线)经过车站:A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 A17 A18 地铁线B(直线)经过车站:B1 B2 B3 B4 B5 T1 B6 B7 B8 B9 B10 T2 B11 B12 B13 B14 B15
8.29去掉最大值、最小值之后剩下的个数1、输入一串数,以','分隔,输出所有数中去掉最大值、最小值之后剩下的个数。
(其中最大值与最小值可能有多个)
Smple input:3,3,5,3,6,9,7,9 Sample outPut: 3
8.29从5个人中选取2个人作为礼仪
2、要从5个人中选取2个人作为礼仪,其中每个人的身高范围为160-190,要求2个人的身高差值最小(如果差值相同的话,选取其中最高的两人),以升序输出两个人的身高。
Smple input:161 189 167 172 188 Sample outPut: 188 189
8.29验证括号是否匹配
3、输入一串字符串,其中有普通的字符与括号组成(包括‘(’、‘)’、‘[’,']'),要求验证括号是否匹配,如果匹配则输出0、否则输出1.
Smple input:dfa(sdf)df[dfds(dfd)] Smple outPut:0
8.31回文数
1.判断回文数,是返回1
8.31将第一行中含有第二行中“23”的数输出并排序
2.输入一行数字:123 423 5645 875 186523
在输入第二行:23
将第一行中含有第二行中“23”的数输出并排序
结果即:123 423 186523
8.31翻译电话号码
3.将电话号码 one two 。。。nine zero
翻译成1 2 。。9 0
中间会有double
例如输入:OneTwoThree
输出:123
输入:OneTwoDoubleTwo
输出:1222
输入:1Two2 输出:ERROR
输入:DoubleDoubleTwo 输出:ERROR
第三题:有空格,非法字符,两个Double相连,Double位于最后一个单词都错误
9.1.AM 将整数倒序输出,剔除重复数据
输入一个整数,如12336544,或1750,然后从最后一位开始倒过来输出,最后如果是0,则不输出,输出的数字是不带重复数字的,所以上面的输出是456321和571。如果是负数,比如输入-175,输出-571。
9.1.AM 大数相减
输入两行字符串正整数,第一行是被减数,第二行是减数,输出第一行减去第二行的结果。
备注:1、两个整数都是正整数,被减数大于减数
示例:
输入:1000000000000001
1
输出:1000000000000000
注意大数用char a[] 存储,用%s接收,一位一位的运算。注意a[0]里的正负号。
9.1.AM 判断if语句括号是否合法
编程的时候,if条件里面的“(”、“)”括号经常出现不匹配的情况导致编译不过,请编写程序检测输入一行if语句中的圆括号是否匹配正确。同时输出语句中出现的左括号和右括号数量,如if((a==1)&&(b==1))是正确的,而if((a==1))&&(b==1))是错误的。注意if语句的最外面至少有一对括号。提示:用堆栈来做。
输入:if((a==1)&&(b==1))
输出:RIGTH 3 3
输入:if((a==1))&&(b==1))
输出:WRONG 3 4
9.1.PM字符串M化成以N为单位的段
输入m个字符串和一个整数n, 把字符串M化成以N为单位的段,不足的位数用0补齐。
如 n=8 m=9 ,
123456789划分为:12345678
90000000
123化为:12300000
9.1.PM整数化为2进制数,32位长度。然后逆序输出整数化为2进制数,32位长度。然后逆序输出
9.1.PM背包
01背包
给定一个数,比如20
然后再给定几个数字 1 3 5 7 8
1 3 5 7 8
0 0 1 1 1
因为5+7+8=20
*1、输入一个字符串,将其各个字符对应的ASCII值加5后,输出结果。
* 要求:该字符串只包含小写字母,若其值加5后的字符值大于'z',将其转换成从a开始的字符
*/
public class Demo1 {
public static void main(String[] args) {
Demo1 test = new Demo1();
String data = "";
String regex = "^[a-z]*$";
if (data.matches(regex)) {
System.out.println(test.getString(data));
} else {
System.out.println("输入的字符串不合法");
}
}
public char[] getString(String data) {
char[] arr = data.toCharArray();
for (int i = 0; i < arr.length; i++) {
if (arr[i] + 5 > 'z') {
arr[i] = (char) (arr[i] - 21);
} else {
arr[i] = (char) (arr[i] + 5);
}
}
return arr;
}
}
/**
*2、求一个整形数组中元素的平均值,并统计其中大于和小于此平均值的元素的个数
要求:输入:整形数组中的元素个数及各个元素
输出:整型数组中元素的平均值,大于和小于此平均值的元素个数 */
public class Demo2 {
public static void main(String[] args) {
int[] arr ={1,100};
new Demo2().getavage(arr, 2);
}
public void getavage(int[] arr, int num){
if(num==0){
System.out.println("数组为空");
}else{
double avage = 0.0;
int sum = 0;
int count1=0;
int count2=0;
for(int i=0;i sum += arr[i]; } avage = (double)sum/num; for(int j =0;j if(arr[j]>avage){ count1++; }else{ count2++; } } System.out.println("平均值:"+avage); System.out.println("大于平均值的元素个数:"+count1); System.out.println("小于平均值的元素个数:"+count2); } } } 3、手动输入一个存储整数的数组,要求输出数组里面的2个最大值 例子:输入:1、2、5、9、84、3、2 输出:84、9 public class Demo3 { public static void main(String[] args) { Demo3 test = new Demo3(); int[] arr = {1}; test.getMaxValue(arr); } public void getMaxValue(int[] arr){ int temp=0; if(arr.length<1){ System.out.println("数组元素个数至少为2"); } else{ for(int i=0;i for(int j=0;j if(arr[i]>arr[i+1]){ temp = arr[i]; arr[i]=arr[i+1]; arr[i+1]=temp; } } } System.out.print(arr[arr.length-1]+"、"+arr[arr.length-2]); } } } 4、回文数字判断。题目描述:有这样一类数字,他们顺着看和倒着看是相同的数。 如:121,656,2332等。这样的数字称为回文数字。 编写一个函数,判断某数字是否是回文数字。 public String isPalidrome(String strIn) 输入:strIn:整数,以字符串表示 返回:true:是回文数字 false:不是回文数字 只需完成该函数功能算法,中间不需要任何IO的输入和输出 示例:输入:strIn="121",返回:true public class Demo4 { public boolean isPalindrome(String str) { char[] arr = str.toCharArray(); int len = arr.length; boolean b = false; for(int i = 0; i <= len/2; i++ ) { if(arr[i] != arr[len-i-1]) { break; } b=true; } } public static void main(String[] args) { String str = "223322"; if(new Demo4().isPalindrome(str) ) { System.out.println("该字符串是回文字符串!"); } else { System.out.println("该字符串不是回文字符串!"); } } } 6、手动输入一个字符串,仅限小写字母,统计并输出每个字符在字符串中出现的次数,并输出。提示可以用map 例子:输入:aaabbbccc 输出:a 3 b 3 c 3 public class Demo6 { public static void main(String[] args) { Demo6 test = new Demo6(); String data = "kjdfldfsaf"; String regex = "^[a-z]*$"; if(data.matches(regex)){ Map for(Map.Entry System.out.println(entry.getKey()+" "+entry.getValue()); } }else{ System.out.println("输入的字符串不合法"); } } public Map Map char[] arr = data.toCharArray(); for(int i=0;i if(!tree.containsKey(arr[i])){ tree.put(arr[i], new Integer(1)); }else{ Integer in = tree.get(arr[i])+1; tree.put(arr[i], in); } } } } 7、要求实现方法(这是在网上看的一个答案。没有处理负数相加。字符串相加竟然也能通过!) public class Demo7_bignum { public String addTwoBigNumber(String s1,String s2){ //大数相加,注意处理异常 String result=""; //保证s1是最长的 if(s1.length() String temStr = s2; s2 = s1; s1 = temStr; } int sum =0; int flag = 0;//进位 int deleW=s1.length()-s2.length(); //从个位开始相加 for(int i=s1.length()-1;i>=0;i--){ if((i-deleW)>=0){ sum = (s1.charAt(i)-'0')+(s2.charAt(i-deleW)-'0')+flag; }else{ sum = (s1.charAt(i)-'0')+flag; } //每次相加后把进位置0 flag = 0; //如果和大于等于10,再将进位置为1 if(sum>9){ sum-=10; flag = 1; } result = sum+result; } //如果最高位有进位 if(flag == 1){ result = "1"+result; flag = 0; } return result; } public static void main(String[] args) { Demo7_bignum test = new Demo7_bignum(); String str = test.addTwoBigNumber("","0"); System.out.println(str); } } 7.1、大数相加 import java.math.BigDecimal; public class Demo7_1 { public String addTwoBigNumber(String s1,String s2){ //大数相加,注意处理异常 String regex = "^\\-?[1-9][0-9]*\\.?[0-9]*$"; if(!s1.matches(regex)||!s2.matches(regex)){ return "输入的值不合法"; } BigDecimal bd1 = new BigDecimal(s1); BigDecimal bd2 = new BigDecimal(s2); String result = bd1.add(bd2).toString(); return result; } public static void main(String[] args) { Demo7_1 test = new Demo7_1(); String r1 = test.addTwoBigNumber("123456789","987654321"); String r2 = test.addTwoBigNumber("-10.5", "5"); System.out.println(r1); System.out.println(r2); } } /** * 8、比较二维数组列最小值,组成一个新数组返回。 * (实现核心算法,不需要使用IO) 输入:{{5,6,1,16},{7,3,9}} 输出:intArrs * ={1,3} */ public class Demo8 { public static void main(String args[]) { // 写测试方法 int[][] a = { { 5, 6, 1, 16 }, { 7, 3, 9 }, { 2, 4, 56 } }; int[] ss = getColMin(a); for (int i = 0; i < ss.length; i++) { System.out.print(ss[i] + " "); } } public static int[] getColMin(int a[][]) { int[] res = new int[a.length]; for (int i = 0; i < a.length; i++) { int[] s = a[i]; Arrays.sort(s); res[i] = s[0]; } return res; } } /** * 10、功能描述:将字符串中的字母全部替换成字母的下一个字母,要是最后一位是z或Z则替换为a或A。 * 输入:aBxyZ * 输出:bCyzA */ public class Demo10 { public static void main(String[] args) { String data = ""; System.out.println(new Demo10().nextString(data)); } public String nextString(String data) { char[] arr = data.toCharArray(); for (int i = 0; i < arr.length; i++) { if (arr[i] >= 'a' && arr[i] <= 'z' || arr[i] >= 'A' && arr[i] <= 'Z') { if (arr[i] == 'z' || arr[i] == 'Z') { arr[i] = (char) (arr[i] - 25); } else if ((arr[i] >= 'a' && arr[i] < 'z') || (arr[i] >= 'A' && arr[i] < 'Z')) { arr[i] = (char) (arr[i] + 1); } } } String res = String.valueOf(arr); return res; } } /** * 11、判断一个字符串中是否只含有相同的子字符串(子字符串>=2)。输入:abab 返回:true 输入:abcd 返回:false */ public class Demo11 { public static void main(String[] args) { String data = "ababab"; boolean flag = new Demo11().checkString(data); System.out.println(flag); } public boolean checkString(String data) { boolean flag = false; if (data.length() == 2 || data.length() == 0 || data.length() % 2 != 0) { return flag; } int subStrMaxLen = data.length() / 2; for (int i = 2; i <= subStrMaxLen; i++) { int subStrNumber = data.length() / i; String[] temp = new String[subStrNumber]; int begin = 0; int end = i; for (int j = 0; j < subStrNumber; j++) { temp[j] = data.substring(begin, end); begin += i; end += i; } for (int k = 0; k < subStrNumber - 1; k++) { if (temp[k].equals(temp[k + 1])) { flag = true; } else { flag = false; break; } } if (flag == true) { break; } } return flag; } } 1、对整形数据组按照和指定整数的差值大小进行排序,按照差值升序排列返回。 要求实现方法: public static int[] calcTimes(int[] num, int value); 【输入】 num:整型数组; value 指定的整数 【返回】按照升序返回整型数组,排序按照各个整数和指定整数的差值大小【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出 示例 输入:num = {1,2,3,4,5,10,17,18,19} value = 5 返回:{5,4,3,2,1,10,17,18,19} data[flag]= data[j]; num[flag]= num[j]; flag = j; i++; }else j--; } } data[flag]= value; num[flag]= value_num; quickSort(num,data,begin,flag-1); quickSort(num,data,flag+1,end); } } int* calcTimes(int num[],int n,int value){ int*data =newint[n]; for(int i=0;i < n;i++){ data[i]= abs(num[i]-value); } quickSort(num,data,0,n-1); cout< delete[] data; return num; } int main(){ int n,m; 目录 样题-初级题:从考试成绩中划出及格线 (2) 样题-中级题:亮着电灯的盏数 (2) 样题-高级题:地铁换乘 (3) 8.29去掉最大值、最小值之后剩下的个数 (3) 8.29从5个人中选取2个人作为礼仪 (4) 8.29验证括号是否匹配 (5) 8.31回文数 (5) 8.31将第一行中含有第二行中“23”的数输出并排序 (6) 8.31翻译电话号码 (6) 9.1.AM 将整数倒序输出,剔除重复数据 (7) 9.1.AM 大数相减 (8) 9.1.AM 判断if语句括号是否合法 (8) 9.1.PM (8) 9.1.PM (9) 9.1.PM (9) 样题-初级题:从考试成绩中划出及格线 10个学生考完期末考试评卷完成后,A老师需要划出及格线,要求如下: (1) 及格线是10的倍数; (2) 保证至少有60%的学生及格; (3) 如果所有的学生都高于60分,则及格线为60分 样题-中级题:亮着电灯的盏数 一条长廊里依次装有n(1 ≤ n ≤ 65535)盏电灯,从头到尾编号1、2、3、…n-1、n。每盏电灯由一个拉线开关控制。开始,电灯全部关着。 有n个学生从长廊穿过。第一个学生把号码凡是1的倍数的电灯的开关拉一下;接着第二个学生把号码凡是2的倍数的电灯的开关拉一下;接着第三个学生把号码凡是3的倍数的电灯的开关拉一下;如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下。n个学生按此规定走完后,长廊里电灯有几盏亮着。 注:电灯数和学生数一致。 样题-高级题:地铁换乘 已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。经过的站点名分别如下,两条线交叉的换乘点用T1、T2表示。编写程序,任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次)。 地铁线A(环线)经过车站:A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 A17 A18 地铁线B(直线)经过车站:B1 B2 B3 B4 B5 T1 B6 B7 B8 B9 B10 T2 B11 B12 B13 B14 B15 8.29去掉最大值、最小值之后剩下的个数1、输入一串数,以','分隔,输出所有数中去掉最大值、最小值之后剩下的个数。 (其中最大值与最小值可能有多个) Smple input:3,3,5,3,6,9,7,9 Sample outPut: 3 8.29从5个人中选取2个人作为礼仪 2、要从5个人中选取2个人作为礼仪,其中每个人的身高范围为160-190,要 注:1.本文代码仅保证在visual studio 2005上运行通过! 2.高亮的题目为华为机试第三题左右难度。 3.本文的字符串基本运用C++里的string类,很少使用常规字符数组形式。 4.freopen()为输入重定向,方便测试,具体用法问度娘。 1.给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,Z换成A, 如aBf转换成bCg,字符串内的其他字符不改变,给定函数,编写函数 void Stringchang(const char*inpu,char*output) 其中input是输入字符串,output是输出字符串 #include华为校园招聘上机题
华为上机题汇总111题