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
相关资源:各大银行信息科技岗面试笔试题库