### 2014华为机试和面试资料整理 #### 题目1:求整型数组中的最小数和最大数之和 **题目描述**: 编写一个C语言程序,输入一个整型数组(数组长度不超过50),计算并输出数组中的最小数和最大数之和。如果数组中只有一个数,则输出该数的两倍。 **代码实现**: ```c #include<stdio.h> int main() { int num[50] = {0}; int i, n; printf("请输入整型数组的长度(1~50):"); scanf("%d", &n); printf("请输入整型数组的元素:"); for (i = 0; i < n; i++) { scanf("%d", &num[i]); } int min_num = num[0]; int max_num = num[0]; for (int j = 0; j < n; j++) { if (max_num < num[j]) { max_num = num[j]; } else if (min_num > num[j]) { min_num = num[j]; } } int sum = min_num + max_num; printf("数组中最大与最小值之和:%d\n", sum); return 0; } ``` **解析**: 1. **初始化**:定义了一个大小为50的整型数组`num`,用于存储输入的整数序列。 2. **输入处理**:首先询问用户数组长度,并读取用户输入的每个数组元素。 3. **求解过程**:通过遍历数组,更新最小值`min_num`和最大值`max_num`。 4. **输出结果**:计算并输出最小值与最大值的和。 --- #### 题目2:求两个长整型数据的和 **题目描述**: 编写一个C语言程序,输入两个长整型数字(可能超过常规整型变量的长度),计算并输出它们的和。 **代码实现**: ```c #include<stdio.h> #include<string.h> int main() { char s1[1000] = {'\0'}; char s2[1000] = {'\0'}; int m1 = 0, m2 = 0, i, j; int len1, len2; int f = 0; // 表示是否有进位 int answer[1000], k = 0; int flag = 0; // 标志位,用于判断是否输出前导零 scanf("%s%s", s1, s2); len1 = strlen(s1); len2 = strlen(s2); for (i = len1 - 1, j = len2 - 1; i >= 0; i--, j--) { m1 = (int)s1[i] - 48; if (j >= 0) m2 = (int)s2[j] - 48; else m2 = 0; if (f == 1) { m1--; f = 0; } if (m1 >= m2) { answer[k++] = m1 - m2; } else { answer[k++] = m1 + 10 - m2; f = 1; } } for (i = k - 1; i >= 0; i--) { if (flag == 0 && answer[i] == 0) continue; else { flag = 1; printf("%d", answer[i]); } } return 0; } ``` **解析**: 1. **初始化**:定义两个字符数组`s1`和`s2`用于存储输入的两个长整型数。 2. **输入处理**:读取两个字符串`s1`和`s2`。 3. **求解过程**:从后往前遍历两个字符串,进行逐位相加,考虑进位情况。 4. **输出结果**:逆序输出计算结果。 --- #### 题目3:过滤字符串中的重复字符 **题目描述**: 编写一个C语言程序,输入一个小写字母字符串(由a到z组成),过滤掉重复出现的字符。 **代码实现**: ```c #include<stdio.h> #include<string.h> int main() { char s[256] = {'\0'}; int i = 0, tmp[256] = {0}; gets(s); while (s[i] != '\0') { tmp[s[i++]] = 1; } for (i = 0; i < 256; i++) { if (tmp[i]) { printf("%c", i); } } return 0; } ``` **解析**: 1. **初始化**:定义一个字符数组`s`用于存储输入的字符串,一个整型数组`tmp`用于记录字符是否出现过。 2. **输入处理**:读取一个字符串`s`。 3. **求解过程**:遍历字符串`s`,在数组`tmp`中标记出现过的字符。 4. **输出结果**:输出所有只出现一次的字符。 --- #### 题目4:字符串压缩 **题目描述**: 编写一个C语言程序,输入一个小写字母字符串(由a到z组成),对连续重复的字母进行压缩,输出压缩后的字符串。 **代码实现**: ```c #include<stdio.h> #include<string.h> int main() { char c[1000] = {'\0'}; int i, count = 1; int len; scanf("%s", &c); len = strlen(c); for (i = 0; i < len; i++) { if (c[i] == c[i + 1]) { count++; } else { if (count > 1) { printf("%d%c", count, c[i]); } else { printf("%c", c[i]); } count = 1; } } return 0; } ``` **解析**: 1. **初始化**:定义一个字符数组`c`用于存储输入的字符串。 2. **输入处理**:读取一个字符串`c`。 3. **求解过程**:遍历字符串`c`,统计每个字符的连续重复次数。 4. **输出结果**:输出压缩后的字符串。 --- #### 题目5:计算简单的加减运算式 **题目描述**: 编写一个C语言程序,输入一个100以内的正整数加减运算表达式,输出其结果。 **示例代码**: 由于题目未提供完整的代码示例,这里给出一种可能的实现方式: ```c #include<stdio.h> int main() { char expression[100] = {'\0'}; int num1, num2; char op; printf("请输入一个加减运算表达式(如:5+3):"); scanf("%d %c %d", &num1, &op, &num2); switch (op) { case '+': printf("结果:%d\n", num1 + num2); break; case '-': printf("结果:%d\n", num1 - num2); break; default: printf("未知运算符\n"); } return 0; } ``` **解析**: 1. **初始化**:定义一个字符数组`expression`用于存储输入的表达式。 2. **输入处理**:读取一个表达式。 3. **求解过程**:根据输入的运算符执行相应的加法或减法操作。 4. **输出结果**:输出计算结果。 以上是2014年华为机试的一些典型题目及其解答思路。通过这些练习可以提高解决问题的能力,并有助于准备类似的技术面试。
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助