版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 華為筆試算法題匯總</b></p><p> 1.通過鍵盤輸入一串小寫字母(a~z)組成的字符串。請(qǐng)編寫一個(gè)字符串過濾程序,若字符串中出現(xiàn)多個(gè)相同的字符,將非首次出現(xiàn)的字符過濾掉。</p><p> 比如字符串“abacacde”過濾結(jié)果為“abcde”。</p><p> 要求實(shí)現(xiàn)函數(shù):void strin
2、gFilter(const char *pInputStr, long lInputLen, char *pOutputStr);</p><p> 【輸入】 pInputStr: 輸入字符串</p><p> lInputLen: 輸入字符串長度 <
3、/p><p> 【輸出】 pOutputStr: 輸出字符串,空間已經(jīng)開辟好,與輸入字符串等長; </p><p> 【注意】只需要完成該函數(shù)功能算法,中間不需要有任何IO的輸入輸出</p><p><b> 示例 </b></p><p> 輸入:“deefd”
4、; 輸出:“def”</p><p> 輸入:“afafafaf” 輸出:“af”</p><p> 輸入:“pppppppp” 輸出:“p”</p><p> main函數(shù)已經(jīng)隱藏,這里保留給用戶的測試入口,在這里測
5、試你的實(shí)現(xiàn)函數(shù),可以調(diào)用printf打印輸出</p><p> 當(dāng)前你可以使用其他方法測試,只要保證最終程序能正確執(zhí)行即可,該函數(shù)實(shí)現(xiàn)可以任意修改,但是不要改變函數(shù)原型。</p><p> 一定要保證編譯運(yùn)行不受影響</p><p> [cpp] view plaincopy</p><p> ////////////////////
6、//////////////////////////////////////////////////////</p><p> #include <iostream> </p><p> #include <cassert> </p>&
7、lt;p> using namespace std; </p><p> bool g_flag[26]; </p><p> void stringFilter(const char *pInputStr, long
8、 lInputLen, char *pOutputStr) </p><p><b> { </b></p><p> assert(pInputStr != NULL); &l
9、t;/p><p> int i = 0; </p><p> if (pInputStr == NULL || lInputLen <= 1) </p><p><
10、b> { </b></p><p> return; </p><p><b> } </b></p><p> const char *p =
11、0;pInputStr; </p><p> while(*p != '\0') </p><p><b> { </b></p><p> if (g_f
12、lag[(*p - 'a')]) </p><p><b> { </b></p><p><b> p++; </b></p><p> }e
13、lse{ </p><p> pOutputStr[i++] = *p; </p><p> g_flag[*p - 'a'] = 1; </p><p&
14、gt;<b> p++; </b></p><p><b> } </b></p><p><b> } </b></p><p> pOutputStr[
15、i] = '\0'; </p><p><b> } </b></p><p> int main() </p><p><b> {
16、 </b></p><p> memset(g_flag,0,sizeof(g_flag)); </p><p> char input[] = "abacacde"; </p><
17、;p> char *output = new char[strlen(input) + 1]; </p><p> stringFilter(input,strlen(input),output); </p><p> cout
18、<<output<<endl; </p><p> delete output; </p><p> return 0; </p><p><b> }
19、60; </b></p><p><b> 2.</b></p><p> 通過鍵盤輸入一串小寫字母(a~z)組成的字符串。請(qǐng)編寫一個(gè)字符串壓縮程序,將字符串中連續(xù)出席的重復(fù)字母進(jìn)行壓縮,并輸出壓縮后的字符串。</p><p><b> 壓縮規(guī)則:</b></p>&l
20、t;p> 1、僅壓縮連續(xù)重復(fù)出現(xiàn)的字符。比如字符串"abcbc"由于無連續(xù)重復(fù)字符,壓縮后的字符串還是"abcbc"。</p><p> 2、壓縮字段的格式為"字符重復(fù)的次數(shù)+字符"。例如:字符串"xxxyyyyyyz"壓縮后就成為"3x6yz"。</p><p><b>
21、; 要求實(shí)現(xiàn)函數(shù): </b></p><p> void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);</p><p> 【輸入】 pInputStr: 輸入字符串</p><p> lInputLen: 輸入字符串長度&l
22、t;/p><p> 【輸出】 pOutputStr: 輸出字符串,空間已經(jīng)開辟好,與輸入字符串等長;</p><p> 【注意】只需要完成該函數(shù)功能算法,中間不需要有任何IO的輸入輸出</p><p><b> 示例 </b></p><p> 輸入:“cccddecc” 輸出:“3
23、c2de2c”</p><p> 輸入:“adef” 輸出:“adef”</p><p> 輸入:“pppppppp” 輸出:“8p”</p><p> [cpp] view plaincopy</p><p> /////////////////////////////////////
24、///////////////////////////////////// </p><p> #include <iostream> </p><p> #include <cassert> </p>
25、<p> using namespace std; </p><p> void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr) &l
26、t;/p><p><b> { </b></p><p> const char *p = pInputStr; </p><p> int num = 1;
27、 </p><p> int i = 0; </p><p><b> p++; </b></p><p> while(*p != NULL)
28、0; </p><p><b> { </b></p><p> while(*p == *(p-1)&& *p != NULL) </p><p><b> {
29、 </b></p><p> num++; </p><p><b> p++; </b></p><p><b> } </b
30、></p><p> if (num > 1) </p><p><b> { </b></p><p> int size = 0;
31、60;</p><p> int temp = num; </p><p> while(num) //計(jì)算位數(shù)
32、;</p><p><b> { </b></p><p> size++; </p><p> num /= 10; </p><p><b>
33、 } </b></p><p> num = 1; </p><p> for (int j = size; j > 0; j--)
34、;</p><p><b> { </b></p><p> pOutputStr[i+j-1] = '0'+ temp%10; </p><p> temp /= 10;
35、; </p><p><b> } </b></p><p> i +=size; </p><p> pOutputStr[i++] = *(p-1);
36、60; </p><p><b> p++; </b></p><p> }else{ </p><p> pOutputStr[i++] = *(p-1); </p
37、><p><b> p++; </b></p><p><b> } </b></p><p><b> } </b></p><p>
38、 pOutputStr[i] = '\0'; </p><p><b> } </b></p><p> int main() </p><p><b&
39、gt; { </b></p><p> char input[] = "cccddecc"; </p><p> char *output = new char[strlen(input)
40、160;+ 1]; </p><p> stringZip(input,strlen(input),output); </p><p> cout<<output<<endl; </p><p&g
41、t; return 0; </p><p><b> } </b></p><p> 3.通過鍵盤輸入100以內(nèi)正整數(shù)的加、減運(yùn)算式,請(qǐng)編寫一個(gè)程序輸出運(yùn)算結(jié)果字符串。</p><p> 輸入字符串的格式為:“操作數(shù)1 運(yùn)算符 操作數(shù)2
42、”,“操作數(shù)”與“運(yùn)算符”之間以一個(gè)空格隔開。</p><p><b> 補(bǔ)充說明:</b></p><p> 1、操作數(shù)為正整數(shù),不需要考慮計(jì)算結(jié)果溢出的情況。</p><p> 2、若輸入算式格式錯(cuò)誤,輸出結(jié)果為“0”。</p><p><b> 要求實(shí)現(xiàn)函數(shù): </b><
43、;/p><p> void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr);</p><p> 【輸入】 pInputStr: 輸入字符串</p><p> lInputLen: 輸入字符串長度
44、 </p><p> 【輸出】 pOutputStr: 輸出字符串,空間已經(jīng)開辟好,與輸入字符串等長; </p><p> 【注意】只需要完成該函數(shù)功能算法,中間不需要有任何IO的輸入輸出</p><p><b> 示例 </b></p><p>
45、 輸入:“4 + 7” 輸出:“11”</p><p> 輸入:“4 - 7” 輸出:“-3”</p><p> 輸入:“9 ++ 7” 輸出:“0” 注:格式錯(cuò)誤</p><p> [cpp] view plaincopy</p><p> ////////////////////////////
46、////////////////////////////////////////////// </p><p> #include <iostream> </p><p> using namespace std; </p&g
47、t;<p> void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr) </p><p><b> { </b></p&
48、gt;<p> const char *input = pInputStr; </p><p> char *output = pOutputStr; </p><p> int sum =
49、 0; </p><p> int operator1 = 0; </p><p> int operator2 = 0; </p><p> char&
50、#160;*temp = new char[5]; </p><p> char *ope = temp; </p><p> while(*input != ' ') //獲得操
51、作數(shù)1 </p><p><b> { </b></p><p> sum = sum*10 + (*input++ - '0'); </p>
52、;<p><b> } </b></p><p> input++; </p><p> operator1 = sum; </p><p> sum =&
53、#160;0; </p><p> while(*input != ' ') </p><p><b> { </b></p><p> *temp++
54、160;= *input++; </p><p><b> } </b></p><p> input++; </p><p> *temp = '\0';
55、 </p><p> if (strlen(ope) > 1 ) </p><p><b> { </b></p><p> *output++
56、= '0'; </p><p> *output = '\0'; </p><p> return; </p><p><b> }
57、0; </b></p><p> while(*input != '\0') //獲得操作數(shù)2 </p><p><b> { </b></p><p> sum
58、60;= sum*10 + (*input++ - '0'); </p><p><b> } </b></p><p> operator2 = sum;
59、0; </p><p> sum = 0; </p><p> switch (*ope) </p><p><b> { </b></p><
60、;p> case '+':itoa(operator1+operator2,pOutputStr,10); </p><p> break; </p><p> case '-':itoa(operator1-operator2,pOu
61、tputStr,10); </p><p> break; </p><p> default: </p><p> *output++ = '0'; &
62、#160;</p><p> *output = '\0'; </p><p> return; </p><p><b> } </b></p>&l
63、t;p><b> } </b></p><p> int main() </p><p><b> { </b></p><p> char input
64、[] = "4 - 7"; </p><p> char output[] = " "; </p><p> arithmetic(inpu
65、t,strlen(input),output); </p><p> cout<<output<<endl; </p><p> return 0; </p><p><b> }
66、 </b></p><p> 4.輸入1--50個(gè)數(shù)字,求出最小數(shù)和最大數(shù)的和</p><p> [cpp] view plaincopy</p><p> //華為2014年機(jī)試題1:輸入1--50個(gè)數(shù)字,求出最小數(shù)和最大數(shù)的和 </p>&
67、lt;p> //輸入以逗號(hào)隔開 </p><p> #include<stdio.h> </p><p> #define N 50 </p><p> void sort(
68、int a[],int n); </p><p> int main(void) </p><p><b> { </b></p>&l
69、t;p> char str[100]; </p><p> int a[N]={0}; </p><p> gets(str); //要點(diǎn)1:動(dòng)態(tài)的輸入1--50個(gè)整數(shù),不能確定個(gè)數(shù),只能用字符串輸
70、入,然后分離出來 </p><p> int i=0; </p><p> int j=0; </p><p> int sign=1; </
71、p><p> while(str[i]!='\0') </p><p><b> { </b></p><p> if(str[i]!=',') //輸入時(shí)要在半角輸入
72、60; </p><p><b> { </b></p><p> if(str[i] == '-') //要點(diǎn):2:有負(fù)整數(shù)的輸入 </p><p><
73、;b> { </b></p><p> // i++; //易錯(cuò)點(diǎn)1 </p><p> sign=-1; </p><p><b> }
74、 </b></p><p> else if(str[i]!='\0') //不用else的話,負(fù)號(hào)也會(huì)減去‘0’ </p><p><b> { </b></p><p&
75、gt; a[j]=a[j]*10 + str[i]-'0'; //要點(diǎn)3:輸入的可以是多位數(shù) </p><p><b> } </b></p><p><b> } &l
76、t;/b></p><p><b> i++; </b></p><p> if(str[i]==',' || str[i]=='\0') //這個(gè)判斷是在i自加以后 </p>&
77、lt;p><b> { </b></p><p> a[j]=a[j]*sign; //易錯(cuò)點(diǎn)2 </p><p> sign=1; ////易錯(cuò)點(diǎn)3 </p
78、><p> j++; //j就是a數(shù)組的個(gè)數(shù) 范圍0到j(luò)-1 </p><p><b> } </b></p><p><b> } <
79、;/b></p><p> sort(a,j); </p><p> printf("Max number + Min number = %d",a[0]+a[j-1]); </p><p&
80、gt; return 0; </p><p><b> } </b></p><p> void sort(int a[],int n) //選擇排序 </p
81、><p><b> { </b></p><p> int i,j; </p><p> int k; </p><p> int temp;
82、0; </p><p> for(i=0;i<n-1;i++) </p><p><b> { </b></p><p><b> k=i; </
83、b></p><p> for(j=i+1;j<n;j++) </p><p><b> { </b></p><p> if(a[k]>a[j]) </p><p
84、><b> k=j; </b></p><p><b> } </b></p><p> if(i!=k) </p><p><b> {
85、 </b></p><p> temp = a[k]; </p><p> a[k] = a[i]; </p><p> a[i] = temp;
86、60; </p><p><b> } </b></p><p><b> } </b></p><p> for(i=0;i<n;i++) </p>
87、<p> printf("%-5d",a[i]); </p><p> puts(""); </p><p><b> } </b></p><p>
88、<b> 初始化順序表</b></p><p><b> 計(jì)算線性表的長度</b></p><p><b> 插入結(jié)點(diǎn)</b></p><p><b> 追加結(jié)點(diǎn)</b></p><p><b> 刪除結(jié)點(diǎn)</b></
89、p><p><b> 查找結(jié)點(diǎn)</b></p><p><b> 按照序號(hào)查找結(jié)點(diǎn)</b></p><p><b> 按照關(guān)鍵字查找結(jié)點(diǎn)</b></p><p><b> 顯示所有的結(jié)點(diǎn)</b></p><p><b>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
評(píng)論
0/150
提交評(píng)論