海尔嵌入式软件开发工程师笔试 9-27
《嵌入式软件开发笔试与面试手册》:https://blog.nowcoder.net/zhuanlan/jvN8gj
《软件开发笔试汇总》:https://blog.nowcoder.net/zhuanlan/0oDWVm
题型:编程题、C相关选择题、IOT相关内容
编程题(核心代码模式)
第一题
长数字的可能性
Samwell将N个碗排成一条直线,并在每个碗中随机放置几个弹球,使得:
1.一个碗一次最多只能有9个弹球。
2.一个碗可以有0个弹球。
现在,Samwell的朋友在最后一碗里又加了一个弹球。加了这个弹球后,所有碗仍必须符合上述规则。加入弹球遵循与加入遗留弹球相同的规则。
您会得到每个碗中弹球数量的初始列表。找到上次修改的碗的位置。(假设下标从1开始)。
注:如果出现必须再增加一个碗的情况,则输出0。
输入规范:
输入1:N,碗的数量。
输入2:包含每个碗里的弹球数量的数组。
输出规范:
上次修改的碗的位置。
例1:
输入1:2
输入2:{9,9}
输出:0
说明:
当我们在最后一个碗中加入1个弹球时,碗的新配置为{0,0}。没有上次修改的碗。
例2:
输入1:5
输入2:{1,2,9,9,9}
输出:2
说明:
当我们在最后一个碗中加入1个弹球时,碗的新配置为{1,3,0,0,0}。
2号碗是上次修改的。
int lastModified(int N, int bowls[]) { int index = N - 1; // 从最后一个碗开始 int carry = 1; // 表示需要加入的弹球数量 while (index >= 0 && carry > 0) { bowls[index] += carry; if (bowls[index] > 9) { bowls[index] = 0; carry = 1; } else { carry = 0; } index--; } if (carry > 0) { return 0; } else { return index + 2; // 因为下标从1开始,所以需要加2 } }
第二题
儿童节
儿童节时,一位老师想给所有学生分发糖果。她有N颗糖果,每颗糖果都有一个特殊值。她希望所有的糖果都有相同的特殊值,所以她决定减小一些糖果的特殊值。然而,不能减小全部糖果的特殊值。
因此,她决定减小尽可能多的糖果特殊值,使得至少K颗糖果具有相同的特殊值并且该值必须尽可能大。求出这个老师能够达到的最大值。
输入规范:
输入1:N,糖果总数
输出2:K,具有相同的特殊值的糖果
输出3:用in表示糖果特殊值的数组
输出规范:
返回这个老师能够达到的最大值。
例1:
输入1:3
输入2:2
输入3:{26,20,23}
输出:23
说明:
在这里,老师可以将第一个糖果的特殊值减小到23,因此,至少有两颗糖果的特殊值为23.
例2:
输入1:6
输入2:4
输入3:{100,20,40,20,50,50}
输出:40
说明:
在这里,我们需要让4颗糖果的特殊值相等。因此,我们可以将值100、50、50减小到40,并且已经有一颗糖果的特殊值为40。因此,我们得到了4颗值为40的糖果。
int candies(int N, int K, int candies[]) { // 冒泡排序,用于降序排序 for (int i = 0; i < N - 1; i++) { for (int j = 0; j < N - i - 1; j++) { if (candies[j] < candies[j + 1]) { int temp = candies[j]; candies[j] = candies[j + 1]; candies[j + 1] = temp; } } } int maxValue = 0; for (int i = 0; i <= N - K; i++) { if (candies[i + K - 1] > maxValue) { maxValue = candies[i + K - 1]; } } return maxValue; }
C相关内容
问题1
您会从列出的选项中选择哪项插入到给定程序中的缺失代码位置,使得在传递的输入为12 56 34 22 89时能够输出如下所示的结果?分析给定的选项并选择正确的答案。
输出:56 34 22 89 12
#include <stdio.h> #include <stdlib.h> int* Calculate(int* arr,int num){ int temp=arr[0]; for(int i=0;i<num;i++){ // Missing Code } return arr; } int main(){ int num; printf("Enter no. elements:"); scanf("%d",&num); int* arr=(int*)(malloc(sizeof(int)*num)); printf("Enter array elements:n"); for(int i=0;i<num;i++) scanf("%d", &arr[i]); arr=Calculate(arr,num); printf("Result:in"); for(int i=0;i<num;i++) printf("%d ", arr[iJ); return 0; }
选择一个选项
A
if(i==num)
arr[i]=temp;
else
arr[i]=arr[i];
B
if(i==num-1)
arr[i]=temp;
else
arr[i]=arr[i+1];
C
if(i==num+1)
arr[i]=temp+1;
else
arr[i]=arr[i];
D
if(i==num-1)
arr[i]=temp+1;
else
arr[i]=arr[i]+1;
问题2
参考给定的代码并找出其正确的输出结果:
#include <stdio.h> int main(void) { int myarr[6] =(10,20,30,40,50,60]; for (int i =0;i<6; i++) { printf("%d ", myarr[i]); } printf("\n"); myarr[0] =50; myarr[2] =60; myarr[5]=70; for (int i =0;i<6;i++) { printf("%d ",myarr[i]); printf("%d ", myarr[i]); } }
分析给定的选项并选择适当的答案。
选择一个选项
A
10 20 30 40 50 60
50 20 60 40 50 70
B
10 20 30 40 50 60
50 50 50 20 20 20 60 60 60 40 40 405050 50 70 70 70
C
10 20 30 40 50 60
20 20 60 60 40 40 70 70
D
10 20 30 40 50 60
50 50 20 20 60 60 40 40 50 50 70 70
问题3
如果传递的输入是45,那么给定的C程序的输出是什么?
#include<stdio.h> int main() { int num,num1[50],i=0; printf("Enter number:"); scanf("%d", &num) ; while(num!=0) { num1[i] =num%2; i++; num = num/2; } printf("\nResult ="); for(i=(i-1);i>=0;i--) printf("%d", num1[i]); return 0; }
从给定的选项中选择适当的答案。
选择一个选项
Result =101101
Result =101111
Result =111101
Result =111110
问题4
以下C语言程序的输出结果是什么?
#include <stdio.h> int main() { int i,j; for(i=1;i<=3;i++){ for(j=1;j<=3;j++){ i++; if(j==2){ continue; } printf("%d",j); } printf("%d",i); } return 0; }
选择一个选项
123
134
124
122
问题5
以下那些存储类具有全局作用域?
选择一个选项
Auto
Register
Extern
所有选项均不确
问题6
在执行以下这段代码时,会显示哪个给定的值?
#include<stdio.h>
#define MAIN main()
#define BEG {
#define END }
MAIN
BEG
printf("wow");
END
选择一个选项
Compile ti
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏主要发布嵌入式软件开发相关岗位2023年(2024届)的笔试真题(嵌入式软件开发、通用软件开发、C/C++软件开发、算法工程师、数据开发、测试开发等)主要是算法编程题,其中一些岗位笔试含有对应的选择题、填空题、简单题。