2023-01-19 記錄c++入門級(jí)別面試

前言

xxx公司的入門級(jí)別面試。先讓我做了普及組的第三題,我半個(gè)小時(shí)就一A了。最后反饋是算法能力還ok,但是試講和表達(dá)能力可能相對(duì)欠缺。接下來(lái)重點(diǎn)復(fù)盤(pán)我的試講部分。我將描述試講題目、原來(lái)的講解,反思,以及修改后的講解四部分。

題目

題目是找出1~n之間的真數(shù),真數(shù)的定義是因子之和等于數(shù)字本身,那么就是真數(shù)。

我的講解

我當(dāng)時(shí)直接講了怎么判斷一個(gè)數(shù)字是不是質(zhì)數(shù),幫助學(xué)生回憶怎么求質(zhì)數(shù)

bool isPrime(int n) {
  bool ret=true;
  for(int i=2;i<=n-1;i++) {
    if (n%i==0) ret=false;
  }
  return ret;
}

然后我說(shuō),判斷一個(gè)數(shù)字是不是真數(shù)也是類似的,對(duì)以上程序進(jìn)行修改,可以得到以下程序:

bool isZhen(int n) {
  int sum=0; //原來(lái)的ret要改成sum,因?yàn)橐y(tǒng)計(jì)因子之和
  for(int i=1;i<=n-1;i++) {//i的范圍應(yīng)該改成1~n-1
    if (n%i==0) 
      sum+=i; //本來(lái)是ret=false表示不是質(zhì)數(shù),這里計(jì)算的是因子之和
  }
  return ret==n;//判斷因子之和是不是n,如果是則是真數(shù)。
}

講完了。我說(shuō)如果還需要補(bǔ)充,那么可能要一行行調(diào)試演示每一行再做什么,因?yàn)楹芏嗤瑢W(xué)可能if和for都用不利索。
關(guān)于怎么調(diào)動(dòng)孩子的積極性,我回答了一個(gè)是運(yùn)用激勵(lì)制度,回答題目有積分,積分可以換禮物;另一個(gè)是我上課前做做題,培養(yǎng)自己的熱情。
之后就收到hr的反饋,覺(jué)得我試講和表達(dá)能力欠缺。

反思

表達(dá)能力是我繞不過(guò)去的一個(gè)坎。我覺(jué)得面試不是很好也是有點(diǎn)因?yàn)槲逸p敵了,當(dāng)時(shí)在趕著回家,有點(diǎn)著涼,我也沒(méi)好好想過(guò)應(yīng)該怎么面??戳酥醯囊粋€(gè)回答,感覺(jué)確實(shí)得改改了
程序員的語(yǔ)言表達(dá)能力欠缺是為什么?該怎么鍛煉? - 李鵬的回答 - 知乎
里面提到了一點(diǎn),程序員的思考邏輯和生活中是不太一樣的,程序員要求過(guò)程中不能出錯(cuò),就像程序一樣中間有一點(diǎn)錯(cuò)就不能運(yùn)行了。而正常人接受的方式是整個(gè)邏輯要理順,細(xì)節(jié)即使出錯(cuò)也可以自動(dòng)糾偏。所以我覺(jué)得我上面的講解方式也應(yīng)該改一改。

修正后的版本

我們要找到1~n之間的所有真數(shù),那么需要枚舉1~n之間的每一個(gè)數(shù)字,然后再判斷這個(gè)數(shù)字是不是真數(shù)。判斷一個(gè)數(shù)是不是真數(shù),需要將它的因子之和求出來(lái)。判斷一個(gè)數(shù)是不是它的因子,只需要判斷n%i是不是等于零就可以了。

我們正著來(lái)看:
首先,我們枚舉1~N之間的每一個(gè)數(shù)字n,現(xiàn)在判斷它是不是真數(shù),那么就要統(tǒng)計(jì)n的因子之和。
統(tǒng)計(jì)n的因子之和,需要枚舉1~n-1之間的所有數(shù)字i,如果if (n%i==0),那么說(shuō)明i是n的因子,i就要加進(jìn)n的因子之和sum中。
最后判斷sum是不是等于n就可以了。為了更詳細(xì)地描述,代碼如下:

bool isZhen(int n) {
  int sum=0;
  for(int i=1;i<=n-1;i++) {
    if (n%i==0) 
      sum+=i; 
  }
  return ret==n;
}
int main(){
  int N;
  cin>>N;
  for(int n=1;i<=N;i++)
  if (isZhen(n)) cout<<n<<endl;
}

我們從main開(kāi)始看,首先讀入N,接下來(lái)判斷1~\N之間每一個(gè)數(shù)字n是不是真數(shù)。判斷真數(shù)的函數(shù)里面,要枚舉n的每一個(gè)因子i,如果i是n的約數(shù),那么sum就加上i。
作為拓展,我們可以復(fù)習(xí)一下怎么求質(zhì)數(shù)的代碼。

bool isPrime(int n) {
  bool ret=true;
  for(int i=2;i<=n-1;i++) {
    if (n%i==0) ret=false;
  }
  return ret;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容