2017春季華爲實習生編程題

題目有三道,我的感受比較簡單,這裏簡單的說一下:ide

1.第一道:將輸入的字符串中的大寫字母轉小寫輸出,錯誤的字符無論(除大小寫以外的都是錯誤的)。post

 1 #include <stdio.h>
 2 #define MAX 1001
 3 
 4 // 輸入字符串 
 5 char str[MAX];
 6 
 7 
 8 int main()
 9 {
10     int i=0;
11     scanf("%s",str);
12     while(str[i]){
13         if(str[i]>='a' &&str[i]<='z') printf("%c",str[i]);
14         else if(str[i]>='A' && str[i]<='Z') printf("%c",str[i]+32);
15         i++;
16     }
17     return 0;    
18 }
View Code

 

2.第二道:題目是集五福相關的,大概意思是:一羣人都有一些福字,你們能夠交換和贈與,問對多能夠集合多少套福?這裏輸入的是11100這樣的字符串,表明每個人有的福字集合,1表明對應的福字有,0則是沒有。spa

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 int mark[5];
 5 char str[5]; // 每個人五福狀況 
 6 
 7 int findMinPos(int arr[],int n)
 8 {
 9     int i,min=0;
10     for(i=1;i<n;i++)
11     {
12         if(arr[i]<arr[min]) min = i;
13     }
14     
15     return min;
16 }
17 
18 int main()
19 {
20     int i;
21     int num;
22     while(scanf("%s",str)!=EOF)
23     {
24         for(i=0;i<5;i++) {
25             num = str[i] - '0';
26             if(num==1) mark[i]++;
27         }
28     } 
29 
30    // 找到最小的 
31     printf("%d\n",mark[findMinPos(mark,5)]);
32     
33     return 0;
34 }
View Code

 

3.第三道:後綴表達式求值:這裏數字只有0-9和A-E,運算符只有+,-,*。code

 1 #include <stdio.h>
 2 #define MAX 1001
 3 
 4 // 得到字符串的值  
 5 int getCharVal(char c)
 6 {
 7     if(c>='0' &&c<='9') return c - '0';
 8     else if(c>='A' && c<='F') return c - 'A' + 10;
 9     else if(c>='a' && c<='f') return c - 'a' + 10;
10     else return -1;    
11 } 
12 
13 // 判斷c是否是運算符 
14 int isOperationChar(char c)
15 {
16     return c=='+' || c=='-' || c=='*';
17 } 
18 
19 // 計算兩數結果 
20 int Calu(int num1,int num2,char c)
21 {
22     switch(c)
23     {
24         case '+': return num1 + num2;
25         case '-': return num2 - num1;
26         case '*': return num1 * num2;
27     } 
28     
29     return -MAX;
30 }
31 
32 // 計算後綴表達式的值並返回  
33 int postfixCalc(const char *input)
34 {
35     int i=0; // 記錄字符串位置
36     char c;
37     int num1,num2; //雙目運算符的數字 
38     
39     //
40     int stack[MAX];
41     int pos = 0;
42     c=input[i];
43     
44     while( c ){
45         
46         // 若是是數字 
47         if(isOperationChar(c)==0){
48             stack[pos++] = getCharVal(c); 
49         } else { // 是運算符
50         
51             num1 = stack[pos-1];
52             num2 = stack[pos-2];
53             stack[pos-2] = Calu(num1,num2,c);
54             pos--;
55         }
56         c = input[++i];
57     }
58     
59     // 返回計算結果
60     return stack[0];    
61 }
62 
63 int main()
64 {
65     char str[MAX];
66     scanf("%s",str);
67     printf("%d\n",postfixCalc(str));
68     
69     return 0;
70 }
View Code
相關文章
相關標籤/搜索