海尔嵌入式软件开发工程师笔试 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++软件开发、算法工程师、数据开发、测试开发等)主要是算法编程题,其中一些岗位笔试含有对应的选择题、填空题、简单题。
查看5道真题和解析