2017春季华为实习生编程题

题目有三道,个人感觉比较简单,这里简单的说一下:

1.第一道:将输入的字符串中的大写字母转小写输出,错误的字符不管(除大小写之外的都是错误的)。

 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则是没有。

 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,运算符只有+,-,*。

 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

 

posted @ 2017-03-24 13:53  GoodboyBin  阅读(333)  评论(0编辑  收藏  举报