shilang 发表于 2017-7-10 11:27:59

2017春季华为实习生编程题

  题目有三道,个人感觉比较简单,这里简单的说一下:
  1.第一道:将输入的字符串中的大写字母转小写输出,错误的字符不管(除大小写之外的都是错误的)。





#include <stdio.h>
#define MAX 1001
// 输入字符串
char str;

int main()
{
   int i=0;
   scanf("%s",str);
   while(str){
         if(str>='a' &&str<='z') printf("%c",str);
         else if(str>='A' && str<='Z') printf("%c",str+32);
         i++;
   }
   return 0;   
}
View Code  2.第二道:题目是集五福相关的,大概意思是:一群人都有一些福字,大家可以交换和赠与,问对多可以集合多少套福?这里输入的是11100这样的字符串,代表每一个人有的福字集合,1代表对应的福字有,0则是没有。





#include<stdio.h>
#include<stdlib.h>
int mark;
char str; // 每一个人五福情况
int findMinPos(int arr[],int n)
{
   int i,min=0;
   for(i=1;i<n;i++)
   {
         if(arr<arr) min = i;
   }
   
   return min;
}

int main()
{
   int i;
   int num;
   while(scanf("%s",str)!=EOF)
   {
         for(i=0;i<5;i++) {
             num = str - '0';
             if(num==1) mark++;
         }
   }

    // 找到最小的
   printf("%d\n",mark);
   
   return 0;
}
View Code  3.第三道:后缀表达式求值:这里数字只有0-9和A-E,运算符只有+,-,*。





#include <stdio.h>
#define MAX 1001
// 获得字符串的值
int getCharVal(char c)
{
   if(c>='0' &&c<='9') return c - '0';
   else if(c>='A' && c<='F') return c - 'A' + 10;
   else if(c>='a' && c<='f') return c - 'a' + 10;
   else return -1;   
}

// 判断c是不是运算符
int isOperationChar(char c)
{
   return c=='+' || c=='-' || c=='*';
}

// 计算两数结果
int Calu(int num1,int num2,char c)
{
   switch(c)
   {
         case '+': return num1 + num2;
         case '-': return num2 - num1;
         case '*': return num1 * num2;
   }
   
   return -MAX;
}

// 计算后缀表达式的值并返回
int postfixCalc(const char *input)
{
   int i=0; // 记录字符串位置
   char c;
   int num1,num2; //双目运算符的数字
   
   // 栈
   int stack;
   int pos = 0;
   c=input;
   
   while( c ){
         
         // 如果是数字
         if(isOperationChar(c)==0){
             stack = getCharVal(c);
         } else { // 是运算符
             num1 = stack;
             num2 = stack;
             stack = Calu(num1,num2,c);
             pos--;
         }
         c = input[++i];
   }
   
   // 返回计算结果
   return stack;   
}

int main()
{
   char str;
   scanf("%s",str);
   printf("%d\n",postfixCalc(str));
   
   return 0;
}
View Code
页: [1]
查看完整版本: 2017春季华为实习生编程题