前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >科大讯飞2021笔试题

科大讯飞2021笔试题

作者头像
Jasonangel
发布2021-05-28 10:43:48
1.8K0
发布2021-05-28 10:43:48
举报

来源于读者投稿,作者Angel

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

岗位:嵌入式软件开发

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

题目

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

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

代码语言:javascript
复制
//写一个函数返回参数的二进制中1的个数
#include<stdio.h>
#include<stdlib.h>
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、数组的排序(时间复杂度最小),应该是让你用冒泡或者选择排序。

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

代码语言:javascript
复制
#include<stdlib.h>
#include<stdio.h>
#include<string.h>

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

代码语言:javascript
复制
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 ··················

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式Linux系统开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档