<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          智商檢測(cè)?華為筆試題居然這么簡(jiǎn)單!

          共 5900字,需瀏覽 12分鐘

           ·

          2021-04-21 23:51

          點(diǎn)藍(lán),關(guān)注并星標(biāo),學(xué)術(shù)




          大家好,今天給大家?guī)?lái)的是華為的編程筆試題,一共三題,由于題目比較簡(jiǎn)單,所以就不分章節(jié)了,一口氣全部寫(xiě)完,讓大家看個(gè)過(guò)癮。

          題目來(lái)源于牛客網(wǎng),如果大家想要親自上手實(shí)戰(zhàn)的話,可以點(diǎn)擊下方閱讀原文進(jìn)行跳轉(zhuǎn)。

          汽水問(wèn)題

          有這樣一道智力題:“某商店規(guī)定:三個(gè)空汽水瓶可以換一瓶汽水。小張手上有十個(gè)空汽水瓶,她最多可以換多少瓶汽水喝?”答案是5瓶,方法如下:先用9個(gè)空瓶子換3瓶汽水,喝掉3瓶滿的,喝完以后4個(gè)空瓶子,用3個(gè)再換一瓶,喝掉這瓶滿的,這時(shí)候剩2個(gè)空瓶子。然后你讓老板先借給你一瓶汽水,喝掉這瓶滿的,喝完以后用3個(gè)空瓶子換一瓶滿的還給老板。如果小張手上有n個(gè)空汽水瓶,最多可以換多少瓶汽水喝?

          輸入描述:
          輸入文件最多包含10組測(cè)試數(shù)據(jù),每個(gè)數(shù)據(jù)占一行,僅包含一個(gè)正整數(shù)n(1<=n<=100),表示小張手上的空汽水瓶數(shù)。n=0表示輸入結(jié)束,你的程序不應(yīng)當(dāng)處理這一行。
          輸出描述:
          對(duì)于每組測(cè)試數(shù)據(jù),輸出一行,表示最多可以喝的汽水瓶數(shù)。如果一瓶也喝不到,輸出0。
          輸入例子1:
          3
          10
          81
          0
          輸出例子1:
          1
          5
          40

          解法

          這是一道經(jīng)典的智力題,主要的trick在于當(dāng)我們有兩個(gè)飲料瓶的時(shí)候,可以通過(guò)向店老板先借一瓶飲料再償還。但這個(gè)trick題目當(dāng)中已經(jīng)寫(xiě)得很清楚了,基本上可以說(shuō)是沒(méi)有難度了。

          我們用一個(gè)變量表示當(dāng)前剩余的飲料瓶的個(gè)數(shù),當(dāng)飲料瓶的個(gè)數(shù)大于等于2的時(shí)候,我們持續(xù)進(jìn)行拿瓶換飲料的操作即可。最后特判一下飲料瓶的數(shù)量等于2的時(shí)候跟老板借一瓶飲料的操作即可。

          代碼

          int main() {
              int x;
              while (~scanf("%d", &x) && x != 0) {
                  int ret = 0;
                  while (x > 1) {
                      ret += x / 3;
                      x = x % 3 + x / 3;
                      if (x == 2) {
                          ret ++;
                          break;
                      }
                  }
                  printf("%d\n", ret);
              }
              return 0;
          }

          排序去重問(wèn)題

          明明想在學(xué)校中請(qǐng)一些同學(xué)一起做一項(xiàng)問(wèn)卷調(diào)查,為了實(shí)驗(yàn)的客觀性,他先用計(jì)算機(jī)生成了N個(gè)1到1000之間的隨機(jī)整數(shù)(N≤1000),對(duì)于其中重復(fù)的數(shù)字,只保留一個(gè),把其余相同的數(shù)去掉,不同的數(shù)對(duì)應(yīng)著不同的學(xué)生的學(xué)號(hào)。然后再把這些數(shù)從小到大排序,按照排好的順序去找同學(xué)做調(diào)查。請(qǐng)你協(xié)助明明完成“去重”與“排序”的工作(同一個(gè)測(cè)試用例里可能會(huì)有多組數(shù)據(jù)(用于不同的調(diào)查),希望大家能正確處理)。

          注:測(cè)試用例保證輸入?yún)?shù)的正確性,答題者無(wú)需驗(yàn)證。測(cè)試用例不止一組。

          當(dāng)沒(méi)有新的輸入時(shí),說(shuō)明輸入結(jié)束。

          輸入描述:
          注意:輸入可能有多組數(shù)據(jù)(用于不同的調(diào)查)。每組數(shù)據(jù)都包括多行,第一行先輸入隨機(jī)整數(shù)的個(gè)數(shù)N,接下來(lái)的N行再輸入相應(yīng)個(gè)數(shù)的整數(shù)。具體格式請(qǐng)看下面的"示例"
          輸出描述:
          返回多行,處理后的結(jié)果
          輸入例子1:
          3
          2
          2
          1
          11
          10
          20
          40
          32
          67
          40
          20
          89
          300
          400
          15
          輸出例子1:
          1
          2
          10
          15
          20
          32
          40
          67
          89
          300
          400
          例子說(shuō)明1:
          樣例輸入解釋:
          樣例有兩組測(cè)試
          第一組是3個(gè)數(shù)字,分別是:2,2,1。
          第二組是11個(gè)數(shù)字,分別是:10,20,40,32,67,40,20,89,300,400,15。  

          解法

          這題同樣不難,只需要按照要求實(shí)現(xiàn)排序和去重的功能即可。

          由于題目當(dāng)中沒(méi)有限制不可以使用STL庫(kù),所以我們可以直接使用set、sort等工具,非常方便。這里關(guān)于去重有很多種實(shí)現(xiàn)方案,既可以通過(guò)set、map等數(shù)據(jù)結(jié)構(gòu)在插入的時(shí)候就做好去重,也可以利用排序的有序性在打印的時(shí)候進(jìn)行過(guò)濾。這兩種相差不大,只不過(guò)后者可以免除使用數(shù)據(jù)結(jié)構(gòu),更加簡(jiǎn)單。

          代碼

          int main() {
              int n;
              while (~scanf("%d", &n)) {
                  vector<int> vt;
                  for(int i = 0; i < n; i++) {
                      int x;
                      scanf("%d", &x);
                      vt.push_back(x);
                  }
                  sort(vt.begin(), vt.end());
                  for (int i = 0; i < vt.size(); i++) {
                      if (i == 0 || vt[i] != vt[i-1]) {
                          printf("%d\n", vt[i]);
                      }
                  }
              }
              return 0;
          }

          進(jìn)制轉(zhuǎn)換

          寫(xiě)出一個(gè)程序,接受一個(gè)十六進(jìn)制的數(shù),輸出該數(shù)值的十進(jìn)制表示。

          輸入描述:
          輸入一個(gè)十六進(jìn)制的數(shù)值字符串。注意:一個(gè)用例會(huì)同時(shí)有多組輸入數(shù)據(jù),請(qǐng)參考帖子https://www.nowcoder.com/discuss/276處理多組輸入的問(wèn)題。
          輸出描述:
          輸出該數(shù)值的十進(jìn)制字符串。不同組的測(cè)試用例用\n隔開(kāi)。
          輸入例子1:
          0xA
          0xAA
          輸出例子1:
          10
          170

          解法

          在十六進(jìn)制當(dāng)中,用A-F分別表示10到15。在十進(jìn)制當(dāng)中,每進(jìn)一位單位乘10,在十六進(jìn)制當(dāng)中每進(jìn)一位單位乘16。我們只需要遵循這樣的計(jì)算規(guī)則就可以解出本題。

          字符串初始的0x表示這是一個(gè)16進(jìn)制數(shù),并沒(méi)有特殊含義,我們直接忽略即可。

          代碼

          int main() {
              string st;
              while (cin >> st) {
                  int base = 1;
                  int ret = 0;
                  for(int i = st.size()-1; i > 1; i--) {
                      int bit = 0;
                      if (st[i] >= '0' && st[i] <= '9') {
                          bit = st[i] - '0';
                      }else {
                          bit = 10 + st[i] - 'A';
                      }
                      ret += bit * base;
                      base *= 16;
                  }
                  printf("%d\n", ret);
              }
              return 0;
          }

          總結(jié)

          老實(shí)講我沒(méi)做過(guò)華為的筆試題,但是從聽(tīng)說(shuō)的消息以及拿到的真題來(lái)看,華為的題目算是比較基礎(chǔ)。考察的與其說(shuō)是候選人的算法、數(shù)據(jù)結(jié)構(gòu)的能力倒不如說(shuō)是更多的考察的是基本功。

          對(duì)于C++來(lái)說(shuō)除了基本的語(yǔ)法之外,對(duì)于常用的STL庫(kù)同樣需要有所了解。比如vector、algorithm、map、set等,熟練地使用他們可以節(jié)省大量的工作,極大地簡(jiǎn)化編碼。

          好了,今天的文章就到這里,感謝大家的閱讀,喜歡的話不要忘了三連或給個(gè)星標(biāo)。

          瀏覽 120
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费一级a毛片免费观看 | 一区二区三区三级片 | 婷婷视频在线观看 | 天天综合91 | 欧美亚洲中国 |