网上20132014华为机试的相关java实现(3)

来源:互联网 发布:java中action 编辑:程序博客网 时间:2024/04/30 01:36

1. 输入整型数组求数组的最小数和最大数之和,例如输入1,2,3,4则输出为5,当输入只有一个数的时候,则最小数和最大数都是该数,例如只输入1,则输出为2;另外数组的长度不超过50。

/** *CountMinAddMax.java  */package interview.huawei;/**输入整型数组求数组的最小数和最大数之和,例如输入1,2,3,4则输出为5,当输入只有一个数的时候,则最小数和最大数都是该数,例如只输入1,则输出为2; * 另外数组的长度不超过50 * @author xuhongbin * @data2014年9月20日下午7:10:16 */public class CountMinAddMax {public static int add(int[] num){int min = num[0];int max = num[0];for(int temp : num){if(temp > max){max = temp;}if(temp < min){min = temp;}}return min+max;}/** * @param args */public static void main(String[] args) {int[] t = new int[50];for(int i = 0; i < t.length; i++){t[i] = (int) (Math.random()*10);System.out.print(" " + t[i]);}System.out.println( );System.out.println(add(t));}}



2.求两个长长整型的数据的和并输出,例如输入1233333333333333 。。。 3111111111111111111111111.。。。,则输出。。。。

具体代码:

/** *AddBigNum.java  */package interview.huawei;/** * @author xuhongbin * @data2014年9月20日下午7:24:27 */public class AddBigNum {public static void addBigNum(char[] a, char[] b, char[] conse){//存放结果的数组比加数多一位用于存储可能发生的进位。int jinwei = 0;int temp;int al = a.length-1;int bl = b.length-1;int index = conse.length-1;for(;al>=0&&bl>=0;al--,bl--,index--){temp = a[al]+b[bl]+jinwei;jinwei =(temp>=10? 1:0);conse[index] = (char) (temp%10);}while(al >= 0){temp = a[al]+jinwei;conse[index--] = (char) (temp%10);jinwei =(temp>10? 1:0);al--;}while(bl >= 0){//System.out.println(jinwei);temp = b[bl]+jinwei;conse[index--] = (char) (temp%10);jinwei =(temp>=10? 1:0);bl--;}conse[index] = (char) jinwei;}public static void main(String[] args) {char[] a =     {9,2,3};char[] b = {2,9,4,5,6};for(char c: a){System.out.print((int)c);}System.out.println();for(int i = 0; i<b.length;i++){System.out.print((int)b[i]);}System.out.println();char[] conse = new char[a.length>b.length? (a.length+1):(b.length+1)];addBigNum(a, b, conse);for(char c: conse){System.out.print((int)c);}}}

3. 一组人(n个),围成一圈,从某人开始数到第三个的人出列,再接着从下一个人开始数,最终输出最终出列的人 (约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。)

具体代码实现:

/** *Josephus.java  */package interview.huawei;import java.util.BitSet;/** * @author xuhongbin * @data2014年9月20日下午9:46:48 */public class Josephus {public static int printLastNode(int k, int m, int n){//k指从编号为k的人出发,m为从每次第m 个人出列,n为人数BitSet bs = new BitSet(n);//BitSet存储的是该数字是否被访问过,访问过为true,未访问过为false;int flag = 0;int index = 0;int count = 0;//表示将该表循环一次,没有任意一个数为false;for(int i= k-1; i< n;i++){//System.out.println(i-1);if(!bs.get(i)){count++;flag++;if(flag == m){System.out.println("第"+(i+1)+"个人自杀!!!");bs.set(i);index = i;flag= 0;}}if(i == n-1&& count > 0){i = -1;//特别注意该处i应初始化为-1,而非0,因为for循环还要对i进行+1操作。count = 0;}}return index+1;}public static void main(String[] args) {System.out.println(printLastNode(1, 3, 41)); //最后两个人应该是16和31。ok}}


3. 字串转换
  问题描述:
  将输入的字符串(字符串仅包含小写字母’a'到’z'),按照如下规则,循环转换后输出:a->b,b->c,…,y->z,z->a;若输入的字符串连续出现两个字母相同时,后一个字母需要连续转换2次。例如:aa 转换为 bc,zz 转换为 ab;当连续相同字母超过两个时,第三个出现的字母按第一次出现算。
  要求实现函数:
  void convert(char *input,char* output)
  【输入】 char *input , 输入的字符串
  【输出】 char *output ,输出的字符串
  【返回】无

具体代码如下:

/** *Stringtranslation.java  */package interview.huawei;/** *  问题描述:  * 将输入的字符串(字符串仅包含小写字母’a'到’z'),按照如下规则,循环转换后输出:a->b,b->c,…,y->z,z->a;若输入的字符串连续出现两个字母相同时,后一个字母需要连续转换2次。 * 例如:aa 转换为 bc,zz 转换为 ab;当连续相同字母超过两个时,第三个出现的字母按第一次出现算。 *  要求实现函数: * void convert(char *input,char* output) * @author xuhongbin * @data2014年9月21日上午9:55:11 * 【输入】 char *input , 输入的字符串 * 【输出】 char *output ,输出的字符串 * 【返回】无 */public class Stringtranslation {public static void convert(char[] input,char[] output){char c = input[0];boolean flag = false;output[0] = (char) (c=='z'? 'a':(c+1));for(int i = 1; i < input.length; i++){if(input[i] != input[i-1]||(input[i]==input[i-1]&&flag)){flag = false;output[i] = (char) (input[i]=='z'? 'a':input[i]+1);}else{output[i]= (char) (output[i-1]=='z'? 'a':(output[i-1]+1));flag = true;}}}public static void main(String[] args) {String input =  "abcfgecdboikkndddav";String right = "bcdghfdecpjlmoefebw";System.out.println(right);char[] output = new char[input.length()];convert(input.toCharArray(),output);for(char c : output){System.out.print(c);}}}

非常要注意flag的设定。



0 0
原创粉丝点击