一道微軟的mini-test筆試題(二)
題目要求基本如下:
請編寫乙個控制台程式,要求使用者可以輸入任意組條件,定義兩個字母之間的大小關係。程式可以通過已輸入的條件,推斷出給定的兩個字母之間的大小關係。例如:
使用者輸入:a>b
使用者輸入:b>c
使用者輸入:a?c
程式顯示:a>c
使用者輸入:c
其實這個題目考的是如何選擇乙個好的資料結構,來實現這個演算法。
我的思路就是使用最簡單的二維陣列來表達,具體如下:
總共只有 26 個英文本母,所以不訪定義乙個26x26的二維字元陣列來儲存相互之間的關係;
因為關係是相互的,所以只需要矩陣的上半部分或者下半部分(不過26x26也不算很大,就算了吧~~);
例如: 如果使用者輸入了a>b,先查詢a和b之間的大小關係,如果與『>』衝突,則提示出錯;
不存在衝突則設定[a][b]='>'和[b][a]='<';並且做如下設定:將所以小於b的字元都小於a、所有大於a的字元都大於b;
如果使用者查詢兩個字元之間的關係,則直接從二維表中查詢二者的關係並輸出
這樣一來,問題就迎刃而解了
具體**如下:
#include
#include
#include
#define unknown 'u'
#define larger '>'
#define less '<'
#define max_col 26
//初始化二維陣列
void init();
//列印二維陣列
void print();
//查詢兩個字元的大小關係
bool query(char v1,char v2);
//輸入兩個字元的大小關係
bool input(char v1,char op,char v2);
//獲取兩個字元的大小關係
char getrel(char v1,char v2);
//設定兩個字元的大小關係
void setrel(char v1,char v2,char op);
char matrix[max_col][max_col];
//主函式
int main()
v1=buf[0];
op=buf[1];
v2=buf[2];
if(!isalpha(v1) || !isalpha(v2))
if(op=='?')
else if(op == '>' || op == '<')
input(v1,op,v2);
}else}}
void init()
if(less == getrel(i,v2))}}
//若v1
=========解法二==========
一道微軟實習生筆試題
2010年11月21日 今兒個第一次參加海筆,以前找實習啥的都是被關在乙個小屋子裡孤獨寫 一下放到大場合還真不太適應。閒話少說,直奔主題。微軟今天的考試題很基礎,但是涉及的面也很廣,對於我這個學電子的人來說,著實有不小的壓力,但是對學計算機的人來說,估計就很easy了。先說程式設計題,就一道。在乙個...
一道筆試題
看到一道筆試題,跟自己想的有點出入,就跑了下,看了看原因。我稍微改了下 include int main int argc,char argv 輸出結果 c 5 d 245 press any key to continue vc6.0 debug下的彙編 5 unsigned char a 0xa...
一道筆試題
上次去筆試的時候,有一道題,怎麼也沒做出來,當時也是很緊張,有些思路,但卻沒有做出來。有四個人要過乙個獨木橋,因為天比較黑,而且橋只能允許兩個人同時通過,並且他們只有乙個手電筒。四個人單獨同時橋的時間是1,2,5,8分鐘。問最短的時間是多少?當時我的答案 1和8,1回來,1 5,1回來,1 2 8 ...