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]