關於一道.NET程序員面試題的遐想
前幾天,同學問了我一道程序員的面試題,題目是 “統計用户輸入的一串數字中每個數字出現的次數”。
當時看到這個題目,我的第一想法就是:
1.先判斷用户輸入的是否是數字,用if-else語句來判斷;
2.將用户輸入的數字字符串轉換成char數組;
3.用for循環遍歷每個字符,根據switch-case語句來逐一判斷。
4.再建立一個int數組來接收判斷後的結果,最後for循環輸出。
該方法的解題代碼如下:
View Code
classprogram
{
staticvoidMain(string[]args)
{
//計算用户輸入的一串數字中每個數字出現的次數
eLine("請輸入一串數字");
stringstr=Line();
//將字符串轉換為字符數組
char[]chnum=arArray();
#region判斷用户輸入的是否是數字
for(inti=0;i
{//判斷每一個字符是否是數字通過char的方法來判斷
if(!mber(chnum[i]))
{
eLine("您的輸入有誤,請輸入數字");
Key();
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{
eLine("含有的數字{0}的個數是:{1}",i+1,count[i]);
}
#endregion
Key();
}
}
運行效果如下:
不過,這種方法有兩個缺點就是,如果用户輸入的不是數字(如字母或符號等),程序會提示錯誤,並退出;再者,也會統計出用户沒有輸入過的數字的個數為0個,如果某些時候不想知道沒有輸入的數字的個數,這種解法很不合適,而且代碼修改起來也很複雜。
新解法: 泛型集合
碰巧這幾天接觸了泛型集合,沒想到用Dictionary來解這道題是那麼的簡單。
代碼如下:
View Code
classprogram
{
staticvoidMain(string[]args)
{
eLine("請輸入數字");
stringnumbers=Line();
//創建集合鍵為數字char類型值為每個數字出現的次數int類型
Dictionarydict=newDictionary();
//將數字字符串轉換為單個字符數組
char[]chs=arArray();
for(inti=0;i{
//判斷是否是數字用到char的isnumber方法
if(mber(chs[i]))
{
//如果鍵中已含有該數字,則將其對應的值+1,否則不存在,加入鍵中值為1
if(!ainsKey(chs[i]))
{
//將每個數字字符作為鍵存入鍵值對中,值初始為1
(chs[i],1);
}
else
{
//值+1
dict[chs[i]]++;
}
}
}
//循環遍歷鍵值對輸出
foreach(KeyValuepairitemindict)
{
eLine("數字:{0}出現了{1}次。",,e);
}
Key();
複製代碼
可見,簡單的幾行代碼就解決了。
而且,這種解法完全解決了上面遇到的兩個問題。
我覺得這個應該就是面試官想要的效果吧。(汗。。。不知道我那位同學的面試情況怎麼樣。。。)
寫到這裏,我又想到了見過的另一道面試題:“計算字符串中每種字符出現的次數”。
這要用我開始想到的那種思路來解得話,我豈不是要寫26個case語句來判斷嗎,汗。。。。不知道面試官要是看到這麼多代碼豈不是會當場走人。。。顯然這不是最好的解題辦法。
還是用泛型集合來解:
View Code
classprogram
{
staticvoidMain(string[]args)
{
//計算字符串中每種字符出現的次數(面試題)。
//“WelcometoChina,beijing”,
//不區分大小寫,打印“W2”“e2”“o3”……
/*思路:1將字符串都轉換為小寫形式,否則大小寫會算各一個
*2以字符為鍵每個字符出現的次數為值建立Dictionary泛型集合
*3將字符串轉換為字符數組
*4循環遍歷每個字符,加入集合中作為鍵,其對應的值初始為1
*5在加入鍵之前做一個判斷,由於集合中的鍵不能重複,所以判斷如果鍵中已經還有該字符
*則不再加入該鍵,只把他的值+1
*6去除字符串中的`空格tter()如果是字母,進行操作5
*7總結:主要是泛型集合的應用
*/
//例句:
//stringsentences="WelcometoChina,beijing";
eLine("請輸入一段字母");
stringsentences=Line();
//將字符串都轉換為小寫形式
sentences=wer();
//建立泛型集合
Dictionarydict=newDictionary();
//將字符串變成字符數組
char[]chs=arArray();
//遍歷每一個字符
for(inti=0;i{
//通過char的方法判斷是否為字母,如果為字母,則進行下面的操作,
//否則不操作
if(tter(chs[i]))
{
//如果不包含該鍵,則加入集合中
if(!ainsKey(chs[i]))
{
//將每個字符加入集合中對應鍵,其值初始為1
(chs[i],1);
}
else
{
//否則,包含該鍵,只將其對應的值+1即可值的類型為int
//dict[chs[i]]=dict[chs[i]]+1;
dict[chs[i]]++;
}
}
}
//循環遍歷輸出集合中的鍵值
foreach(KeyValuepairkvindict)
{
eLine("字母:{0}出現了{1}次。",,e);
}
Key();
}
}
同樣,代碼很簡單:
這時,我又突發奇想想到了另一種情況:
用户輸入一串字母和數字的混合字符串如“ddeieiei4954jjfjdji383ddjeuut3003k”
統計出每個數字或字母出現的次數,且數字在前,字母在後 ,數字和字母內沒有順序要求
如 數字 4 出現了 2次
數字 3 出現了 4次
.......
........
字母 d 出現了 5次
...........
當然,最簡單的還是用泛型集合來解了。。。。
最後來個總結吧:
個人認為,遇到一個新的問題的時候,關鍵是思路,把思路一步一步理順了,就像我們老師説的那樣,知道你要幹什麼,想好怎樣去做,最後再去寫代碼。不要一上來就敲代碼,思路都沒搞清楚呢,最後肯定是問題多多。
希望這篇文章可以給像我這樣正在找工作的應屆生一些小小的幫助吧!
(突然覺得在大學裏學的那些知識都太簡單了,而且太深了也不講。找工作時真的很無奈啊!!!)
相關文章
-
linuxC程序員經典面試題一
日系波波頭甜美減齡又不失氣質,是很多短髮美眉的首選髮型,本期愛靚網小編帶來了五款清爽減齡的日系波波頭髮型圖片精選,喜歡波波頭的美眉趕快來挑選上一款吧!日系波波頭髮型圖片1、側分的長劉海露出一部分的額頭和眉眼,給 -
女本 計算機專業想做net程序員難不難?
在武漢女生本科計算機專業想做程序員難不難?有沒有公司要女生?實習工資大概多少?沒有實際項目經驗學了oop,,,SQL server,HTML,CSS,Javascript,Dom,Jquery,三層架構和存儲過程還有什麼必備的? -
.net程序員的就業前景
眾所周知,打從誕生那一天起,業界就瀰漫着一股貶低的空氣。許多公司排斥,因為低效的名聲,加之怕被微軟綁架的擔心。許多C++程序員有偏見,看不起程序員,認為那些人比較菜,才學入門級的語言。Java程序員對也不待見,我們會Spring,H -
NET程序員個人簡歷
個人基本簡歷簡歷編號:更新日期:姓 名:國籍:中國目前所在地:廣州民族:漢族户口所在地:清遠身材:169 cm? kg婚姻狀況:未婚年齡:28 歲培訓認證:誠信徽章: 求職意向及工作經歷人才類型:普通求職?應聘職位:計算機類:程序員、計算機類 -
asp.net程序員個人簡歷模板
買笑尋歡【意思解釋】1.見"買笑追歡"。 -
雀巢Nestle面試的問題總結
雀巢Nestle的申請我很早就在網上看到了,早早地down下來,一直沒填,想等到宣講過後再填。但後來消息傳來,除了在宣講會上遞交簡歷和Application Form之外,要郵寄到北京雀巢(中國)總部去。因此,雖然那天港龍面試結束後已是精疲 -
.net web開發面試題
1. 你經常訪問那些業界的網站和blog?這個問題自己琢磨吧2. 你喜歡獨立工作還是團隊工作?這個問題其實沒有對錯之分,跟用人單位的工作環境和項目有關,有的單位喜歡獨立性高的人有的人喜歡團隊型的人,最好還是能證明自己既 -
tencent騰訊筆試題
騰訊的流程是一筆和四面。前三次面試都是技術面,hr面基本不刷人。筆試成績決定面試順序。技術面可能要寫代碼,做智力題目。主要是c/c++、數據結構、操作系統等方面的基礎知識。好像有sizeof、樹等選擇題。填空題是補充 -
tencent騰訊 筆試題
[轉]tencent騰訊筆試題基本都是基礎題目,看來騰訊不準備放棄那些有思想但是還沒有開始苦練基本功的人,只涉及到語言問題和簡單的數據結構,其他的操作系統,編譯原理,離散數學,軟件工程,計算機原理,體系結構等等無一涉及,題目很 -
hibernate面試題彙總
1. 請解釋Hibeate3.2主鍵的生成方式中,native和identity方式的區別。Native主鍵生成方式會根據不同的底層數據庫自動選擇Identity、Sequence、Hilo主鍵生成方式特點:根據不同的底層數據庫採用不同的主鍵生成方式。由於H