科大讯飞产品经理面试(科大讯飞2021笔试题)

来源于读者投稿,作者Angel

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

岗位:嵌入式软件开发

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

题目

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

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

//写一个函数返回参数的二进制中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、数组的排序(时间复杂度最小),应该是让你用冒泡或者选择排序。

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

#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

科大讯飞产品运营岗面试

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 :%sn", str);     reverse_left_2(str, n, len);     printf("reverse_left string is :%sn", str);     system("pause");     return 0; }

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

您可以还会对下面的文章感兴趣

使用微信扫描二维码后

点击右上角发送给好友