两个人做人爱视频免费,97久久精品人人搡人妻人人玩,欧洲精品码一区二区三区,999zyz玖玖资源站永久

我要投稿 投訴建議

華為筆試真題

時間:2021-02-21 14:57:58 筆試題目 我要投稿

2017華為筆試真題

  華為上機考試有哪些考點呢?以下是CN人才網小編整理的2017華為筆試真題,歡迎閱讀參考!

2017華為筆試真題

  2017華為筆試真題一

  1. 編寫函數string deletestring(string str,string sub_str)從str中查找匹配的字符串sub_str,采用最左匹配,且輸出形式為str+"_"+匹配的次數

  題目一的意思應該是求解字符串str中子字符串sub_str的個數,同時輸出形式采用原字符串+"_"匹配次數

  相信大家第一反應應該是采用kmp,那么下面給出常規優化kmp程序如下(采用字符串數組形式):

  #include

  using namespace std;

  int next[100];

  void getnext(char b[])

  {

  int i=1,j=0; //ij

  next[1]=0;

  while(i<=strlen(b))

  {

  if(j==0||b[i-1]==b[j-1])

  {

  i++;

  j++;

  next[i]=j;

  }

  else j=next[j]; //

  }

  }

  int kmp(char a[],char b[])

  {

  int i=1,j=1; //i j

  while(i<=strlen(a)&&j<=strlen(b))

  {

  if(j==0||a[i-1]==b[j-1])

  {

  i++;

  j++;

  }

  else j=next[j];

  }

  if(j>strlen(b))

  return i-strlen(b);

  else return 0;

  }

  2. 高精度數相加,string addBigInt(string num1,string num2) 需要考慮正負數相加

  這道題是高精度計算中的最最簡單的一題:

  目的是模擬人手工運算的過程,進而進行結果的現實;

  參考代碼(編譯環境:Visual Studio 6):

  2017華為筆試真題二

  1 (1) 字母大小寫反轉

  這到題沒什么可說的,只是我很久沒寫這樣要IO輸入輸出的代碼,當時看到華為的提示紙條上寫著“只能使用stdin方式輸入”,還愣了一會:一定是我打開方式不對,什么時候有了一個stdin的輸入函數?難道我又學藝不精了……后面才反應過來,直接按英文字面意思理解為“只能使用標準輸入方式”就好了。好了,言歸正傳,回到這道題,至少可以用以下兩種方式:

  C++ STL庫string中 有 isupper , islower , toupper ,tolower 函數

  通過 +/- ('a'-'A'+0)

  (2) n個人圍成一圈,從第1個人開始報數,每報到第m個人,則其出局,求最后出局的人的初始序號。

  第1種方法,我當時是用了個狀態表來記錄這人有沒有出局,沒出局則報數計數器加1并玩下走,碰到第m個報數號則更新狀態為已出局,碰到隊伍最末則重新移動到隊首。

  #include

  #define N 4

  #define M 3

  using namespace std;

  int *man = NULL;

  int JosephusSol_statusTab(int n,int m)

  {

  int sn=0 , pos = 0 ,loop_pos=0;

  do

  {

  if( man[pos] == 0 ){//此人未出局

  loop_pos++;

  if(loop_pos == m){//找到一輪報數的出局者

  sn++;

  man[pos] = sn ; // 標記出局序號

  loop_pos = 0;

  }

  }

  pos ++ ;

  if(pos==n)

  pos = 0;

  }while(sn!=n);

  return pos;

  }

  int main()

  {

  int sn=0 , pos = 0 ,loop_pos=0;

  man = new int [N];

  for(int i=0;i

  man[i] = 0;

  pos = JosephusSol_statusTab(N,M);

  cout << pos <

  if(man != 0)

  delete [] man;

  return 0;

  }

  第2種方法是雙向鏈表,技術面面試的時候,面試官就考了我這一題,在紙上快速寫代碼的能力還是有所欠缺。

  第3種方法是遞歸,

  第0次報數(即初始排列狀態)如下:

  1

  2

  ……

  n

  第1次報數到m,剔除后的序列為:

  m+1

  m+2

  …

  n

  1

  2

  …

  m-1

  重新編號的話為:

  1

  2

  …

  n-m

  n-m+1

  n-m+2

  …

  n-1

  設f(n,m)為n個人的隊伍,剔除報數人m,最后留下的人的序號;f(n-1,m)為n-1個人的'隊伍,剔除報數人m,最后留下的人的序號。則有:

  考慮到第1次報數后的序列號n的情況,可得到統一的公式為:

  這就是這個問題的一個遞歸公式,實現代碼如下:

  #include < iostream >

  using namespace std;

  int JosephusSol_mathRecursion( int n, int m)

  {

  if (n == 1 )

  return 1 ;

  else

  return (JosephusSol_mathRecursion(n - 1 ,m) + m - 1 ) % n + 1 ;

  }

  int main()

  {

  cout << JosephusSol_mathRecursion( 4 , 3 ) << endl ;

  return 0 ;

  }

  3.兩段長度為1-5000變換的單詞word1,word2,設計一個字母權重分配方案:該方案中不區分大小寫字母;該方案A-Z的字母唯一對應一個1-26的數;該方案滿足word1的字母權重和與word2的字母權重和的差值最大 。

  這個問題是實質是比較單詞,剔除相同的部分,看哪個剩余部分多,剩余多的單詞部分再進行一個字母頻率從大到小排列,頻率最高的給最大的權重——26,頻率低一些的依次給剩余的最大權重;剩余的單詞部分再進行一個字母頻率也是從大到小排列,只不過頻率最高的給最小的權重——1,頻率高一些的依次給剩余的最小權重。

  至于實現,若是先直接比較單詞,再字母頻率統計,工作量有點大。可以考慮直接用 字母表A-Z為索引,將單詞裝換為字母表A-Z的編碼(更形象點,即將雜亂的單詞變成一個26進制數,當然這樣沒有包含單詞的全部信息——字母在單詞中的排序就不知道,所以可以裝換成26個節點,每個節點還含有一個排序數組,如單詞daddy,相對應的d節點下就含有一個size為3的數組,有sn['d'][3]={0,2,3}。當然本題只需要一個量就是size['d']=3。)

  #include

  #include

  #include

  using namespace std;

  int main()

  {

  string str1("mother"),str2("father");

  // string str1,str2;

  // cin >> str1 >> str2;

  size_t i = 0 ,j =0;

  vector status1(26,0);

  vector status2(26,0);

  vector diff(26,0);

  vector negative(26,0);

  vector positive(26,0);

  int cntNeg = 0 , cntPos = 0;

  for( i = 0; i< str1.size(); i++)

  {

  char c = str1[i];

  if( 'a'<=c && c <= 'z' ){

  status1[c -'a' + 0]++;

  }

  if( 'A'<=str1[i] && str1[i] <= 'Z' ){

  status1[c-'A'+ 0]++;

  }

  }

  for( i = 0; i< str2.size(); i++)

  {

  char c = str2[i];

  if( 'a'<=str2[i] && str2[i] <= 'z' ){

  status2[c -'a' + 0]++;

  }

  if( 'A'<=str2[i] && str2[i] <= 'Z' ){

  status2[c -'A' + 0]++;

  }

  }

  for( i = 0; i< 26; i++){

  diff[i] = status2[i] - status1[i];

  if(diff[i]<0)

  {

  negative[i] = -diff[i];

  cntNeg += negative[i];

  }

  else

  {

  positive[i] = diff[i];

  cntPos += positive[i];

  }

  }

  for( i = 0; i< 26; i++)

  cout << ' '<< status1[i] <<' '<< status2[i] <<' '<< diff[i] << endl;

  int tmp= 0;

  int a[26],b[26];

  cout << ' '<< cntNeg <<' '<< cntPos;

  for( i = 0 ; i < 26;i++ )

  {

  a[i] = 26-i;

  b[i] = i+1;

  }

  for( i = 0 ; i < 26;i++ )

  for(j = i+1 ;j <26;j++)

  {

  if( negative[i] < negative[j] ){

  tmp = negative[i];

  negative[i] = negative[j];

  negative[j] = tmp;

  }

  }

  for( i = 0 ; i < 26;i++ )

  for(j = i+1 ;j <26;j++)

  {

  if( positive[i] < positive[j] ){

  tmp = positive[i];

  positive[i] = positive[j];

  positive[j] = tmp;

  }

  }

  int out=0 , large = 0, small =0 ;

  for( i = 0 ; i < 26;i++ )

  {

  if( cntNeg >= cntPos ) {

  large += a[i]*negative[i];

  small += b[i]*positive[i];

  }

  else{

  large += a[i]*positive[i];

  small += b[i]*negative[i];

  }

  }

  out = large - small;

  cout << out ;

  return 0;

  }

  2.華為2013年在長沙的一個機試題是判斷潤年。年份要求是四位數。

  輸入樣例:

  2012

  2122

  afdsfa

  22.33

  輸出樣例:

  YES

  NO

  ERROR

  我的答案是:

  Java代碼 收藏代碼

  package cn.william;

  import java.awt.event.ActionEvent;

  import java.awt.event.ActionListener;

  import javax.swing.JFrame;

  import javax.swing.JLabel;

  import javax.swing.JTextField;

  public class Test extends JFrame{

  private JLabel lable;

  private JTextField field;

  public static void main(String[] args){

  Test frame = new Test();

  frame.init();

  }

  public void init(){

  this.setSize(400, 250);

  this.setLayout(null);

  lable = new JLabel("請輸入年份:");

  field = new JTextField();

  lable.setBounds(140, 90, 120, 30);

  field.setBounds(140, 120,120, 30);

  this.add(field);

  this.add(lable);

  this.setVisible(true);

  field.addActionListener(new ActionListener() {

  @Override

  public void actionPerformed(ActionEvent e) {

  String year = field.getText().toString();

  if(year.length() != 4){

  System.out.println("ERROR");

  return;

  }

  int y = 0;

  try{

  y = Integer.parseInt(year);

  }catch(Exception ex){

  System.out.println("ERROR");

  return;

  }

  check(y);

  }

  });

  }

  private void check(int year){

  if(year == 0){

  System.out.println("ERROR");

  return;

  }

  if(year % 100 == 0){

  if(year % 400 == 0){

  System.out.println("YES");

  }else{

  System.out.println("NO");

  }

  }else{

  if(year % 4 == 0){

  System.out.println("YES");

  }else{

  System.out.println("NO");

  }

  }

  }

【2017華為筆試真題】相關文章:

2017華為筆試真題及答案03-29

2017記者筆試真題分享05-28

2017事業單位筆試真題03-02

IBM筆試真題01-21

華為筆試經驗分享201703-30

農信社筆試真題02-08

騰訊筆試真題精選01-16

京東往年筆試真題01-08

2017華為校招筆試題06-14

主站蜘蛛池模板: 福泉市| 黔江区| 益阳市| 金阳县| 吴堡县| 垫江县| 紫阳县| 宽城| 郓城县| 仙居县| 澄江县| 泉州市| 康保县| 锦州市| 久治县| 钦州市| 三江| 林西县| 登封市| 曲水县| 吉安县| 通州区| 扎鲁特旗| 安宁市| 贡山| 石泉县| 淳安县| 安多县| 乌鲁木齐市| 喜德县| 始兴县| 平阴县| 江城| 临邑县| 揭阳市| 嘉峪关市| 武汉市| 宁德市| 瑞安市| 那曲县| 九江市|