华为2017秋招机考题

来源:互联网 发布:专业的数控编程软件 编辑:程序博客网 时间:2024/05/22 06:42


0x00     今天有很多同学问机考题都考了什么,正好是第一次参加面试。索性写给自己的CSDN博客开个头。博主水平很菜,答案仅供参考。

0x01    .第一题是做的十进制转二进制,求第一个置位。例如输入1(01)得到0,输入2(10)得到1,输入12(1100)得到3。我先求了二进制数,然后通过循环求了首个置位,9测7对。

package huawei;
import java.util.Scanner;
public class erJinZhi {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
  int x=in.nextInt();
  if(x==0) System.out.print(-1);
  else{

//求二进制数

String str=new String();
while(x!=0)
{
str=String.valueOf(x%2).concat(str);
x=x/2;
}
char[] a=str.toCharArray();
int index=0;

//循环找置位
for(int i=a.length-1;i>=0;i--){
if(a[i]=='0') {
index++;
}
else break;
}
System.out.print(index);
}
}
}

9测7对 

             

0x02    第二题是做的两个字符串分割取相同位置,然后取第一个字符串与第二个字符串相同部分,以及第二个字符串?对应的第一个字符串中位置。第一次出现不同时终止。例如输入asdadfwerws,asda??dsa输出asdadf
    一开始看错题,以为是分行输入,两个str分别char了两个字符数组。然后循环对比,相同以及?输出,结果发现出错。后来考虑到没有比较长度,于是又写了一个比较长度的函数段。然后输出正常,提交了一次结果发现0通过,仔细看题才发现输入形式并不是分行输入,又在开头写了个分段函数,然后输出。提交后,十测五对。写的又臭又长不好意思发上来了希望大神指教好的写法。



0x03.整数之循环节点求和
描述: 
任意一个不是用完全相同数字组成的四位数,如果对它们的每位数字重新排序,组成一个较大的数和一个较小的数,然后用较大数减去较小数,差不够四位数时在前面补零,类推下去,最后将变成一个固定的数:6174。
例如:4321-1234=3087   8730-378=8352   8532-2358=6174   7641-1467=6147。  
如果K位数也照此办理,它们不是变成一个数,而是在几个数字之间形成循环,例如对于五位数54321: 54321-12345=41976  97641-14679=82962   98622-22689=75933     97533-33579=63954   96543-34569=61974   97641-14679=82962    
我们把82962  75933  63954  61974称作循环节。在前面6174中,循环节认为只有一个数。
请输出这些循环节之和,最终结果可能需要使用64位的整型才能存放。当没有循环节,输出0,例如:输入33333,输出0。

 比较幸运在考试之前刷过两道大题其中就有这一道。考试时自己写的太烂卡在排序老是出错,bug不停,其实题目比较简单主要是当时仗着做过就没有先想好思路导致接连出错。最后剩两分钟直接copy了原代码也是有点无奈。
考试结束后重写的代码如下:
package huawei;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;


public class jiedianqiuhe {
/*0x00首先求出第一个result,加入到List中去
* 0x01循环求result,add到List中去,直到出现一个result被List包含
* 0x02循环求出这个重复的result的位置
* 0x03循环相加result的位置到集合最后一个数的和输出
* 0x11创建求差值方法
*/

public static void main(String[] args) {
// TODO Auto-generated method stub
  Scanner in =new Scanner(System.in);
  long input=Long.parseLong(in.nextLine());
 long result=getResult(input);
 int index=0;
 List<Long>resultList=new ArrayList<>();
 while(!resultList.contains(result)){
resultList.add(index,result);
result=getResult(result);
index++;
 }
 int lnindex=0;
 long sum=0;
 for(int i=0;i<resultList.size();i++){
if(resultList.get(i)==result){
for(int j=lnindex;j<resultList.size();j++){ 
sum+=resultList.get(j);
}
System.out.print(sum);
break;
}
else lnindex++;
 }
}
public static long getResult(long input2){
char[] input=(input2+"").toCharArray();
Arrays.sort(input);
String inputString="";
for(int i=0;i<input.length;i++){
inputString+=input[i];
}
    StringBuffer st=new StringBuffer(inputString);
    String af=st.reverse().toString();
    long max=Long.parseLong(af);
    long min=Long.parseLong(inputString);
    long result=max-min;
    return result;
}
}

面试等待中~

0 0
原创粉丝点击