2012.9.19华为机试java标题

2012.9.19华为机试java题目
1、求数组里比平均数大的数的个数。
   int avgNum(int arg[])

package org.hhu.ztc;

public class Test1 {

	public static void main(String args[]) {
		System.out.println(new Test1().avgNum(new int[] { 1, 2, 3, 4, 5, 6, 7,
				8, 9, 10 }));
	}

	public int avgNum(int s[]) {
		int sum = 0;
		int len = s.length;
		int flag = 0;
		double avg;
		for (int i = 0; i < len; i++) {
			sum = sum + s[i];
		}
		avg = (sum + 0.0) / len;
		for (int i = 0; i < len; i++) {
			if (s[i] >= avg)
				flag++;
		}
		return flag;
	}

}













2、两大数相加。
用java.math.BigInteger类
注:必须是正整数相加
package org.hhu.ztc;

import java.math.BigInteger;

public class Test2 {

	public static void main(String args[])
	{
		System.out.println(new Test2().plusBigNum("123456789","987654321"));
		
	}
	
	public String plusBigNum(String arg1, String arg2)
	{
		BigInteger big1 = new BigInteger(arg1);
		BigInteger big2 = new BigInteger(arg2);		
		return big1.add(big2).toString();
	}
	
}


不用java.math.BigInteger类
package org.hhu.ztc;

public class BigIntegerOperation {

	public static void main(String args[]) {
		String num1 = "12345";
		String num2 = "54321";
		int len1 = num1.length();
		int len2 = num2.length();
		/**
		 * 将不等长的两输入字符串格式化,比如 num1 = 123 num2 = 1234 经格式化后将成为num1 = 0123 num2 =
		 * 1234为方便计算
		 */
		if (len1 > len2) {
			for (int i = 0; i < len1 - len2; i++) {
				num2 = "0" + num2;
			}
		} else if (len2 > len1) {
			for (int i = 0; i < len2 - len1; i++) {
				num1 = "0" + num1;
			}
		}

		int[] arr1 = BigIntegerOperation.str2intArr(num1);
		int[] arr2 = BigIntegerOperation.str2intArr(num2);

		int[] result = BigIntegerOperation.add(arr1, arr2);

		for (int i = result.length - 1; i >= 0; i--) {
			if (i == result.length - 1 && result[i] == 0)
				continue;
			System.out.print(result[i]);
		}
	}

	/**
	 * 将字符串转换成整型数组
	 */
	public static int[] str2intArr(String str) {
		int len = str.length();
		int[] arr = new int[len];
		for (int i = 0; i < len; i++) {
			arr[i] = str.charAt(i) - '0';
		}
		return arr;
	}

	/**
	 * 核心方法 两个整型数组相加
	 */
	public static int[] add(int a[], int b[]) {
		int maxLen = a.length;
		int[] sum = new int[maxLen + 1];

		for (int i = 0; i < maxLen; i++) {
			int tempSum = a[i] + b[i];
			sum[i] += tempSum % 10;
			int d = tempSum / 10; // 进位
			sum[i + 1] += d;
		}
		return sum;
	}

}

3、求字符串中最大回文子串。
如输入ababbac 输出abba
package org.hhu.ztc;

public class Test3 {

	public static void main(String args[]) {
		System.out.println(new Test3().getPalindromeString("ababbac"));

	}

	public String getPalindromeString(String inputString) {
		int len = inputString.length();
		for (int i = 0; i < len; i++) {
			for (int j = 0; j < i + 1; j++) {
				String sub = inputString.substring(j, len - i + j);
				String subReverse = new StringBuffer(sub).reverse().toString();
				if (sub.equals(subReverse))
					return sub;
			}
		}
		return "无回文子串";
	}

}



3.补充,求出所有回文子串及最大回文子串
package org.hhu.ztc;

public class Test3 {

	public static void main(String args[]) {
		 new Test3().getPalindromeString("ababbac");

	}

	public String[] getPalindromeString(String inputString) {
		int len = inputString.length();
		String s1[] = new String[len * (len + 1) / 2];
		String s2[] = new String[len * (len + 1) / 2];
		int n = 0;
		for (int i = 0; i < len; i++) {
			for (int j = 0; j < i + 1; j++) {
				String sub = inputString.substring(j, len - i + j);
				String subReverse = new StringBuffer(sub).reverse().toString();
				if (sub.equals(subReverse)) {
					s1[n] = sub;
					n++;
				}
			}
		}
		int m = 0;
		int maxlen = 0;
		if (s1[0] != null) {
			maxlen = s1[0].length();
			for (int i = 0; i < n; i++) {
				if (s1[i].length() == maxlen) {
					s2[m] = s1[i];
					m++;
				}
			}
		}
		//未考虑重复
		System.out.println("所有回文子串:");
		for(int i=0;i<n;i++)
		{
			System.out.println(s1[i]);
		}
		System.out.println("最大回文子串:");
		for(int i=0;i<m;i++)
		{
			System.out.println(s2[i]);
		}
		return s2;

	}

}


1 楼 wavechao 2012-11-12  
感觉求回文子串的有难度