面试笔试题

mac2022-06-30  36

 

1.某种传染病第一天只有一个患者,前五天为潜伏期,不发作也不会传染人第6天开始发作,从发作到治愈需要5天时间,期间每天传染3个人求第N天共有多少患者2.将字符串中相邻相同的子串合并为一个子串,如"12342343454565678789" -- "123456789"3.求一个串中出现的第一个最长重复子串。采用顺序结构存储串,实现求串s中出现的第一个最长重复子串的下标和长度4.求bit位中1的总个数为n的所有整数集合比如,二进制位中有两个1的整数为:0x000000030x000000050x00000006...0xc00000005.去掉整数的bit位为1的最高的两个bit位,如0x1030f --> 0x10f6.unsigned int intvert(unsigned int x, int p, int n)实现对x的进行转换, p为起始转化位(最左边为第1位算起), n为需要转换的长度, 对这些bit位取反假设起始点在右边.如x = 0b0001 0001, p=4, n=3 转换后x = 0b0110 00017.C和C++混合编程,C源文件中会调用C++源文件中定义的函数int func_cpp(int),C++也会调用C源程序中定义的函数int func_c(int),请组织程序的结构c.c, cpp.cpp, pro.h

//第一题#include<iostream>using namespace std;unsigned int func(unsigned int (&array)[10], int days){    unsigned int new_infected = 0;//记录新增的被感染者的人数    unsigned int infect_able = 0; //记录会传染的人数    unsigned int total = 0;       //当天的总或者人数    int i;        for (i = 5; i < 10; i++)        infect_able += array[i];            for (i = 0; i < days; i++)    {        new_infected = infect_able * 3;        infect_able = infect_able + array[4] - array[9];        memmove(array + 1, array, sizeof (int) * 9);        array[0] = new_infected;    }    total = infect_able;    for (i = 0; i < 5; i++)        total += array[i];            return total;}int main(){    unsigned int array[10] = {1};//第一天一个病人    int days;    cout<<"输入天数:"<<endl;    cin>>days;    int total = func(array, days);    cout<<""<<days<<"天患者人数为:"<<total<<endl;    system("pause");    return 0;}//第二题#include<stdio.h>#include<stdlib.h>#include<string.h>char *func(char *src){    int all[256];    int cur_index;    if (NULL == src)        return NULL;    for (cur_index = 0; cur_index < 256; cur_index++)    {        all[cur_index] = -1;    }        cur_index = 0;    while (src[cur_index])    {            int front_index = all[src[cur_index]];        if (front_index == -1)        {            all[src[cur_index]] = cur_index;            ++cur_index;        }        else        {            int rear_index = cur_index;            for (; front_index < cur_index; front_index++, rear_index++)            {                if (src[front_index] != src[rear_index])                    break;            }            if (front_index != cur_index)            {                all[src[cur_index]] = cur_index;                ++cur_index;            }            else            {                strcpy(src + cur_index, src + rear_index);            }        }    }        return src;}int main(){    char src[1000];    puts("请输入字符串");    gets(src);    printf("%s/n", func(src));    system("pause");    return 0;}//第三题#include<iostream>#include<vector>#include<assert.h>using namespace std;void func(const char *src, int *pindex, int *plength){    vector<int> all[256];    int cnt;        assert(NULL != src && NULL != pindex && NULL != plength);    *pindex = -1;    *plength = 0;        for (cnt = 0; src[cnt]; ++cnt)    {        int times;        for (times = 0; times < all[src[cnt]].size(); ++times)        {            int pre = all[src[cnt]][times];            int cur = cnt;                             while (src[pre] == src[cur])            {                ++pre;                ++cur;            }            if (pre - all[src[cnt]][times] > *plength)            {                *pindex = all[src[cnt]][times];                *plength = pre - all[src[cnt]][times];            }        }        all[src[cnt]].push_back(cnt);    }}int main(){    int index;    int length;        char src[1000];    puts("请输入字符串:");    gets(src);        func(src, &index, &length);        puts("结果如下:");    cout<<"index = "<<index<<endl;    cout<<"length = "<<length<<endl;        for (int i = index; i < index + length; i++)    {        cout<<src[i];    }    cout<<endl;    system("pause");    return 0;}//第四题#include<stdio.h>#include<stdlib.h>int get_next(unsigned int *pval){    int cur;    int low, hig;        for (cur = 0; cur != (sizeof(*pval) << 3) - 1; ++cur)    {        if ((*pval & (1 << cur)) && !((*pval & (1 << (cur + 1)))))            break;    }        if ((sizeof(*pval) << 3) - 1 == cur)    {        return 0;    }        for (low = 0, hig = cur + 1; !(*pval & (1 << low)); ++low)        ;        *pval ^= (1 << hig);    *pval ^= (1 << low);    for (hig = cur, low = 0; hig > low; --hig, ++low)    {        if (((*pval & (1 << hig)) && (!(*pval & (1 << low)))) || ((*pval & (1 << low)) && (!(*pval & (1 << hig)))))        {            *pval ^= (1 << hig);            *pval ^= (1 << low);        }    }        return 1;}int main(){    unsigned int val;    int bit1_num;        printf("输入二进制位中1的个数:/n");    scanf("%d", &bit1_num);        if ((sizeof(int) << 3) < bit1_num || bit1_num < 0)    {        printf("Error/n");        exit(1);    }    if ((sizeof(unsigned int) << 3) == bit1_num)        val = -1;    else        val = ((1 << bit1_num) - 1);    do    {        printf("%x/n", val);    }while (get_next(&val));    system("pause");    return 0;}//第五题#include<stdio.h>#include<stdlib.h>unsigned int func(unsigned int val){    unsigned int ui = val;    unsigned int left = 0, right = 0;    while (ui)    {        right = left;        left = (ui & -ui);        ui &= (ui - 1);    }    return (val & ~(left | right));}int main(int argc,char* argv[]){    printf("%x/n", func(0x1030f));        system("pause");    return 0;}//第六题#include<iostream>using namespace std;inline unsigned int intvert(unsigned int x, int p, int n){    //这里加上参数的有效性检查!    return x ^ (((1 << n) - 1) << (p - 1));}int main(){    unsigned int x = 0;    printf("%x/n", intvert(x, 4, 3));        system("pause");    return 0;}//第七题//pro.h#ifndef _PRO_H_#define _PRO_H_#ifdef __cplusplusextern "C"{#endif //__cplusplusint func_cpp(int);int func_c(int);#ifdef __cplusplus}#endif //__cplusplus#endif //_PRO_H_//c.c#include"pro.h"int func_c(int){    ...}//cpp.cpp#include"pro.h"int main(){    ...}int func_cpp(int){    ...}

转载于:https://www.cnblogs.com/deepwishly/archive/2011/06/09/2551157.html

相关资源:各大银行信息科技岗面试笔试题库
最新回复(0)