2016华为软件开发题目讲解

来源:互联网 发布:皇朝万鑫软件 编辑:程序博客网 时间:2024/06/06 08:05

1、才参加了华为的笔试,先吧自己写的源码共享一下!



就是输入字符串,过滤掉其他的字符,只对字母进行重复次数的计算。

java源码为

import java.util.Scanner;
import java.util.regex.PatternSyntaxException;


public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input = sc.next();
if (input.length()>1024) {
}else{
   String in = filter(input);
String output = compressStringBetter(in);
System.out.printf(output);
}
}
public static String filter(String input){
StringBuffer sb = new StringBuffer();
for (int j = 0; j < input.length(); j++) {
if (input.charAt(j)>='A'&&input.charAt(j)<='Z') {
sb.append(input.charAt(j));
}
}
return sb.toString();
}
public static String compressStringBetter(String str) {
int size = countCompression(str);
if (size >= str.length()) {
return str;
}
StringBuffer sb = new StringBuffer();
char last = str.charAt(0);
int count = 1;
for (int i = 1; i < str.length(); i++) {
if (str.charAt(i)>='A'&&str.charAt(i)<='Z') {

}
if (str.charAt(i) == last) {// 找到重复字符
count++;
} else {
sb.append(last);
sb.append(count);
last = str.charAt(i);
count = 1;
}
}
sb.append(last);
sb.append(count);
return sb.toString();// 前面的+最后一组处理


}
public static int countCompression(String in) {
if (in == null || in.isEmpty()) {
return 0;
}
int size = 0;
char last = in.charAt(0);
int count = 1;
for (int i = 1; i < in.length(); i++) {
if (in.charAt(i) == last) {// 找到重复字符
count++;
} else {
last = in.charAt(i);
size += 1 + String.valueOf(count).length();
count = 1;
}
}
size += 1 + String.valueOf(count).length(); // 处理最后一组
return size;
}
}

2、输入两个大整数,求出两者的乘积,如1234567*123 = 151851741.


java源码为:

import java.util.Scanner;


public class Main2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input1 = sc.next();
String input2 = sc.next();
StringBuffer sb = new StringBuffer();
char[] oneCh = input1.toCharArray();
char[] twoCH = input2.toCharArray();
int[] oneInt = new int[200];
int[] twoInt = new int[200];
int[] sumInt = new int[200];
int lenghOne = input1.length();
int lenghTwo = input2.length();
int i;
for (i = lenghOne - 1; i >= 0; i--) {
oneInt[lenghOne - 1 - i] = oneCh[i] - '0';
}
for (i = lenghTwo - 1; i >= 0; i--) {
twoInt[lenghTwo - 1 - i] = twoCH[i] - '0';
}
int temp, k, j;
for (i = 0; i < lenghOne; i++)
for (j = 0; j < lenghTwo; j++) {
temp = oneInt[i] * twoInt[j];
sumInt[i + j] += temp;
k = i + j;
while (sumInt[k] >= 10) {
sumInt[k + 1] += (sumInt[k] / 10);
sumInt[k] %= 10;
k++;
}
}
int flag = 0;
for (i = 199; i >= 0; i--) {
if (sumInt[i] != 0 || flag == 1) {
sb.append(String.valueOf(sumInt[i]));
flag = 1;
}
}
System.out.printf(sb.toString());
}
}

3、输入互不相同的字符串长度为n,如abc,并输入数字m,如2,然后对其进行m个字符有序的输出,如ab ac bc



java源码为:

import java.util.Scanner;


public class Main3 {   
 //求组合数 C(m,n)
 public static int C(int m,int n){
   int c=1;
   int k=1;
   for (int i=1;i<=m;i++){
     c=c*(n+1-i);
     k=k*i;
     }
   return (c/k);
   }
  
 //获取str中所有长度为m的子串
 public static String[] getSubString(String str,int m){
   String[] s=new String[]{};//保存子串
   int count=0;//子串数目
   int n=str.length();//原字符串长度
   if (m>n || m<=0)
     return s;//如果子串长度大于字符串长度,则不会有满足要求的子串
   else
     s=new String[C(m,n)];//保存子串
   int[] k=new int[m];
   for (int i=0;i<m;i++){
     k[i]=i;
     }
   int p=m-1;
   int end=0;
   while (end==0){
     //保存当前得到的子串
     count++;
     String temps="";
     for (int i=0;i<m;i++)
       temps+=str.charAt(k[i]);
     s[count-1]=temps;
      
     //获取下一个子串
     k[p]=k[p]+1;
     while (p>=0 && k[p]-p>n-m){
       p=p-1;
       if (p>=0)
         k[p]=k[p]+1;
     }
     if (p>=0){
       for (int i=p+1;i<m;i++)
         k[i]=k[p]+i-p;
       p=m-1;
     }else{
       end=1;
     }
   }
   return s;
 }
  
  public static void main(String args[]) { 
  StringBuffer sb = new StringBuffer();
  Scanner sc = new Scanner(System.in);
String str = sc.next();
int m = sc.nextInt();
if (m==0||m>str.length()) {
System.out.println("ERROR");
}else{
      String[] ss=getSubString(str,m);
      for(String s : ss)
      sb.append(s+" ");      
      System.out.println(sb.toString());
  }
  }
}

以上均为自己原创代码,如果有不对的地方希望大家能指正!

0 0
原创粉丝点击