• 一道.NET程序員面試題的遐想

    時間:2022-07-13 14:41:20 面試 我要投稿
    • 相關推薦

    關于一道.NET程序員面試題的遐想

    前幾天,同學問了我一道程序員的面試題,題目是 “統計用戶輸入的一串數字中每個數字出現的次數”。

    關于一道.NET程序員面試題的遐想

    當時看到這個題目,我的第一想法就是:

    1.先判斷用戶輸入的是否是數字,用if-else語句來判斷;

    2.將用戶輸入的數字字符串轉換成char數組;

    3.用for循環遍歷每個字符,根據switch-case語句來逐一判斷。

    4.再建立一個int數組來接收判斷后的結果,最后for循環輸出。

    該方法的解題代碼如下:

    View Code

    classprogram

    {

    staticvoidMain(string[]args)

    {

    //計算用戶輸入的一串數字中每個數字出現的次數

    Console.WriteLine("請輸入一串數字");

    stringstr=Console.ReadLine();

    //將字符串轉換為字符數組

    char[]chnum=str.ToCharArray();

    #region判斷用戶輸入的是否是數字

    for(inti=0;i

    {//判斷每一個字符是否是數字通過char的方法來判斷

    if(!char.IsNumber(chnum[i]))

    {

    Console.WriteLine("您的輸入有誤,請輸入數字");

    Console.ReadKey();

    return;

    }

    }

    #endregion

    //定義一個新的數組來保存計數

    int[]count=newint[9];

    #regionfor循環遍歷

    //for循環遍歷

    for(inti=0;i{

    switch(chnum[i])

    {

    case1:

    count[0]++;

    break;

    case2:

    count[1]++;

    break;

    case3:

    count[2]++;

    break;

    case4:

    count[3]++;

    break;

    case5:

    count[4]++;

    break;

    case6:

    count[5]++;

    break;

    case7:

    count[6]++;

    break;

    case8:

    count[7]++;

    break;

    case9:

    count[8]++;

    break;

    }

    }

    #endregion

    #region循環輸出

    for(inti=0;i{

    Console.WriteLine("含有的數字{0}的個數是:{1}",i+1,count[i]);

    }

    #endregion

    Console.ReadKey();

    }

    }

    運行效果如下:

    不過,這種方法有兩個缺點就是,如果用戶輸入的不是數字(如字母或符號等),程序會提示錯誤,并退出;再者,也會統計出用戶沒有輸入過的數字的個數為0個,如果某些時候不想知道沒有輸入的數字的個數,這種解法很不合適,而且代碼修改起來也很復雜。

    新解法: 泛型集合

    碰巧這幾天接觸了泛型集合,沒想到用Dictionary來解這道題是那么的簡單。

    代碼如下:

    View Code

    classprogram

    {

    staticvoidMain(string[]args)

    {

    Console.WriteLine("請輸入數字");

    stringnumbers=Console.ReadLine();

    //創建集合鍵為數字char類型值為每個數字出現的次數int類型

    Dictionarydict=newDictionary();

    //將數字字符串轉換為單個字符數組

    char[]chs=numbers.ToCharArray();

    for(inti=0;i{

    //判斷是否是數字用到char的isnumber方法

    if(char.IsNumber(chs[i]))

    {

    //如果鍵中已含有該數字,則將其對應的值+1,否則不存在,加入鍵中值為1

    if(!dict.ContainsKey(chs[i]))

    {

    //將每個數字字符作為鍵存入鍵值對中,值初始為1

    dict.Add(chs[i],1);

    }

    else

    {

    //值+1

    dict[chs[i]]++;

    }

    }

    }

    //循環遍歷鍵值對輸出

    foreach(KeyValuepairitemindict)

    {

    Console.WriteLine("數字:{0}出現了{1}次。",item.Key,item.Value);

    }

    Console.ReadKey();

    復制代碼

    可見,簡單的幾行代碼就解決了。

    而且,這種解法完全解決了上面遇到的兩個問題。

    我覺得這個應該就是面試官想要的效果吧。(汗。。。不知道我那位同學的面試情況怎么樣。。。)

    寫到這里,我又想到了見過的另一道面試題:“計算字符串中每種字符出現的次數”。

    這要用我開始想到的那種思路來解得話,我豈不是要寫26個case語句來判斷嗎,汗。。。。不知道面試官要是看到這么多代碼豈不是會當場走人。。。顯然這不是最好的解題辦法。

    還是用泛型集合來解:

    View Code

    classprogram

    {

    staticvoidMain(string[]args)

    {

    //計算字符串中每種字符出現的次數(面試題)。

    //“WelcometoChina,beijing”,

    //不區分大小寫,打印“W2”“e2”“o3”……

    /*思路:1將字符串都轉換為小寫形式,否則大小寫會算各一個

    *2以字符為鍵每個字符出現的次數為值建立Dictionary泛型集合

    *3將字符串轉換為字符數組

    *4循環遍歷每個字符,加入集合中作為鍵,其對應的值初始為1

    *5在加入鍵之前做一個判斷,由于集合中的鍵不能重復,所以判斷如果鍵中已經還有該字符

    *則不再加入該鍵,只把他的值+1

    *6去除字符串中的空格char.isLetter()如果是字母,進行操作5

    *7總結:主要是泛型集合的應用

    */

    //例句:

    //stringsentences="WelcometoChina,beijing";

    Console.WriteLine("請輸入一段字母");

    stringsentences=Console.ReadLine();

    //將字符串都轉換為小寫形式

    sentences=sentences.ToLower();

    //建立泛型集合

    Dictionarydict=newDictionary();

    //將字符串變成字符數組

    char[]chs=sentences.ToCharArray();

    //遍歷每一個字符

    for(inti=0;i{

    //通過char的方法判斷是否為字母,如果為字母,則進行下面的操作,

    //否則不操作

    if(char.IsLetter(chs[i]))

    {

    //如果不包含該鍵,則加入集合中

    if(!dict.ContainsKey(chs[i]))

    {

    //將每個字符加入集合中對應鍵,其值初始為1

    dict.Add(chs[i],1);

    }

    else

    {

    //否則,包含該鍵,只將其對應的值+1即可值的類型為int

    //dict[chs[i]]=dict[chs[i]]+1;

    dict[chs[i]]++;

    }

    }

    }

    //循環遍歷輸出集合中的鍵值

    foreach(KeyValuepairkvindict)

    {

    Console.WriteLine("字母:{0}出現了{1}次。",kv.Key,kv.Value);

    }

    Console.ReadKey();

    }

    }

    同樣,代碼很簡單:

    這時,我又突發奇想想到了另一種情況:

    用戶輸入一串字母和數字的混合字符串如“ddeieiei4954jjfjdji383ddjeuut3003k”

    統計出每個數字或字母出現的次數,且數字在前,字母在后 ,數字和字母內沒有順序要求

    如 數字 4 出現了 2次

    數字 3 出現了 4次

    .......

    ........

    字母 d 出現了 5次

    ...........

    當然,最簡單的還是用泛型集合來解了。。。。

    最后來個總結吧:

    個人認為,遇到一個新的問題的時候,關鍵是思路,把思路一步一步理順了,就像我們老師說的那樣,知道你要干什么,想好怎樣去做,最后再去寫代碼。不要一上來就敲代碼,思路都沒搞清楚呢,最后肯定是問題多多。

    希望這篇文章可以給像我這樣正在找工作的應屆生一些小小的幫助吧!

    (突然覺得在大學里學的那些知識都太簡單了,而且太深了也不講。找工作時真的很無奈啊!!!)


    【一道.NET程序員面試題的遐想】相關文章:

    2011最新asp.net面試題與答案07-11

    一道騰訊的面試題07-09

    程序員面試題精選07-12

    一道Java面試題,題目如下07-11

    女本 計算機專業想做net程序員難不難?07-10

    入門級PHP程序員面試題07-09

    一道很不錯的人力資源面試題07-11

    誰有近幾年華為和中興公司的Java程序員面試題07-11

    WAP網絡與NET網絡的區別于定義!07-10

    京東為什么在用.net07-11

    黄频国产免费高清视频_富二代精品短视频在线_免费一级无码婬片aa_精品9E精品视频在线观看