MIK C语言面试两题
生活随笔
收集整理的這篇文章主要介紹了
MIK C语言面试两题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這是一個讀者朋友在知識星球上提到的兩個筆試題,第一個題目比較簡單,關鍵在第二個題目「編程題」,我文章中寫的解題思路應該不是最好的,希望大神讀者們給出更好的答案,讓這個充滿樂趣的程序世界再增添一些樂趣吧,所以, show your code .
第一題,求如下輸出
#include "stdio.h"#define m(x,y) (x)<(y)?x:y int main() {printf("%d\n",10*m(10,15));return 0; }如果是學生的話,建議先看看題目,然后心里默念一下再往下看答案,我知道是一個非常簡單的題目,但是也不要掉以輕心。
輸出:
15-------------------------------- Process exited after 0.2808 seconds with return value 0 請按任意鍵繼續. . .編程題
輸入一個字符串 然后判斷里面最多的字符是什么 大寫小寫都要獨立計數。
#include "stdio.h" #include "string.h"#define m(x,y) (x)<(y)?x:y int main() {int i=0,j=0,m=0;char s[100];char r[255];memset(r,0,sizeof(r));memset(s,0,sizeof(s));gets(s);m=strlen(s);printf("%d %s\n",m,s);for(i=0;i<m;i++){r[s[i]]++;//putchar(s[i]);}printf("\n----------\n");for(i=0;i<255;i++)printf("%d ",r[i]);printf("\n----------\n");for(i=0;i<255;i++){char tmp = 0;for(j=0;j<255-i;j++){if(r[i] > r[j]){tmp = r[j];r[j]=r[i];r[j]=r[i];}}}printf("\n----p------\n");for(i=0;i<255;i++)printf("%d ",r[i]);printf("\n----------\n");printf("%d\n",r[254]);return 0; }上面是一個讀友提出的解決方案,不過我對這個方案不是很滿意「主要覺得代碼行數有點多」,冥思苦想之后,想了下面這個更愚蠢的辦法
#include "stdio.h" #include "string.h" #include "stdint.h"int main(void) {char s[100];uint16_t r[100];int m=0,i=0,j=0;uint8_t temp=0,max=0;memset(s,0,sizeof(s));memset(r,0,sizeof(r));gets(s);m = strlen(s);for(i=0;i<m;i++){for(j=0;j<m;j++){if( s[i] != ((r[j]>> 8)&0xFF) ) {if(r[j] == 0){r[j] = (s[i] << 8)&0xFFFF;r[j] += 0x0001;break;}}else{r[j] += 0x0001;break;}}}temp = r[0]&0xFF;for(i=0;i<m;i++){if(r[i] != 0)printf("%c:%d\n",r[i]>>8,r[i]&0xFF);if((r[i]&0xFF) > temp){temp = r[i]&0xFF;max = i;}}printf(">>>%c:%d\n",r[max]>>8,r[max]&0xFF);return (0); }我還是認為這不是最好的方案,然后在知識星球上有一個讀者評論,我看了評論受到啟發,又進化了一次。
這個思路和上面的第一段代碼差不多,遍歷字符串里面的每一個字符,因為字符是char 類型,所以字符的值和「0-255」是對應關系的,然后再判斷相同字符,如果和「0-255」的某個位置相同,那么這個位置的數組的值就加1。
然后尋找最大只的時候,也要遍歷一遍。
有個弊端,就是如果同時存在幾個相同最多字符的時候,要如何把他們同時輸出的問題,如果使用我第二個方法的話,可以比較容易修改。
代碼如下:
#include "stdio.h" #include "string.h" #include "stdint.h"int main() {uint8_t i=0,temp=0;uint8_t cos = 0;char s[100];char r[255];memset(r,0,sizeof(r));memset(s,0,sizeof(s));gets(s);i=strlen(s);printf("%d\n%s\n",i,s);for(i=0;i<strlen(s);i++){r[s[i]]++; }temp = r[0];cos = 0;for(i=0;i<sizeof(r);i++){if(r[i] > temp){temp = r[i];cos = i;} }printf("%d:%c:%d\n",cos,(char)cos,r[cos]);return 0; }?推薦閱讀:
? ??專輯|Linux文章匯總
? ??專輯|程序人生
? ??專輯|C語言
嵌入式Linux
微信掃描二維碼,關注我的公眾號?
總結
以上是生活随笔為你收集整理的MIK C语言面试两题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ARM指令集介绍
- 下一篇: 被LCD调戏睡不着了