科大讯飞2021笔试题
发布日期:2021-06-30 18:50:59 浏览次数:2 分类:技术文章

本文共 2800 字,大约阅读时间需要 9 分钟。

来源于读者投稿,作者Angel

笔试时间:2020.09.12,19:00——21:00

岗位:嵌入式软件开发

题型:四道编程题,4*10=40分

题目

1、定义一个n*m矩阵,找到两个不在同一行同一列的数字,使得成绩最大。

2、输入一个数N,求数的二进制中1的个数(已AC)

//写一个函数返回参数的二进制中1的个数#include
#include
int count_one_bits(unsigned int value){    int count = 0;    while (value != 0)    {        if (value % 2 == 1)        {            count++;        }        value = value >>1;    }    return count;}int main(){    int num;    int ret;    printf("请输入一个大于0的数\n");    scanf("%d", &num);    ret=count_one_bits(num);    printf("%d", ret);    system("pause");    return 0;}

3、数组的排序(时间复杂度最小),应该是让你用冒泡或者选择排序。

题型是给了一种排序算法的中间过程,让你认出是哪一种排序,然后写代码。

#include
#include
#include
void sortA1(int a[], int length){    int i, j, temp;    for(i = 0; i < length; ++i){        for(j = i + 1; j < length; ++j){            if(a[j] < a[i]){    //如果后一个元素小于前一个元素则交换                temp = a[i];                a[i] = a[j];                a[j] = temp;            }        }    }}void printA1(int a[], int length){    int i;    for(i = 0; i < length; ++i){        printf("%d,", a[i]);    }    printf("\n");}void sortA2(int a[], int length){    int i, j, temp;    for(i = 0; i < length; ++i){        for(j = length - 1; j > i; --j){            if(a[j] > a[j - 1]){                temp = a[j];                a[j] = a[j - 1];                a[j - 1] = temp;            }        }    }}int main(){    int length = 0;    int a[] = {12, 43, 8, 50, 100, 52,0};    length = sizeof(a) / sizeof(a[0]);    printf("排序前\n");    printA1(a, length);    sortA1(a, length);    printf("选择排序后\n");    printA1(a, length);    sortA2(a, length);    printf("冒泡排序后\n");    printA1(a, length);    system("pause");}

4、字符串左旋(case 20%,不知道是哪里没考虑到,读者可以尝试)

输入 1234abcd , 左旋3

输出 4abcd123

void swap(char *start, char *end){    while (start < end)    {        *start ^= *end;        *end ^= *start;        *start ^= *end;        start++, end--;    }}void reverse_left_2(char *str, int n, int len){    char *mid = NULL;//定义一个指针,将指向左旋分段点    n %= len;//判断左旋的有效次数    mid = str + n - 1;//指向分段点的最后一个字符    swap(str, mid);//逆置前一段字符串    swap(mid + 1, str + len - 1);//逆置后一段字符串    swap(str, str + len - 1);//整个字符串逆置}int main(){    char str[] = "abcd1234";    int n = 0, len = strlen(str);    printf("please enter->");    scanf("%d", &n);//输入左旋的次数    printf("before reverse_left string is :%s\n", str);    reverse_left_2(str, n, len);    printf("reverse_left string is :%s\n", str);    system("pause");    return 0;}

·················· END ··················

点击关注公众号,免费领学习资料

欢迎大家关注我的微信公众号,定期给大家分享C语言、单片机、嵌入式Linux、硬件设计、代码人生相关文章。公众号内回复【电子书】即可获得嵌入式全套500本全套电子书。回复【入群】即可加入嵌入式技术交流群。

我创建了知识星球,欢迎大家扫码加入。在知识星球中有问必答。提供全套的嵌入式学习规划、嵌入式学习资料、简历指导、嵌入式求职规划、嵌入式笔试面试指导、公司推荐等。


推荐阅读:

关注公众号,后台回复「1024」获取学习资料网盘链接。

欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~

转载地址:https://linus.blog.csdn.net/article/details/115774555 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:汇顶科技2021秋招笔试
下一篇:Linux中,文件创建的时间是怎么保存的?

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月06日 03时10分00秒