logo资料库

2017最全华为机试题C/C++(含答案源码).pdf

第1页 / 共146页
第2页 / 共146页
第3页 / 共146页
第4页 / 共146页
第5页 / 共146页
第6页 / 共146页
第7页 / 共146页
第8页 / 共146页
资料共146页,剩余部分请下载后查看
2017 校招华为上机题汇总 1. 给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a 换成 b,z 换成 a,Z 换成 A, 如 aBf 转换成 bCg,字符串内的其他字符不改变,给定函数,编写函数 void Stringchang(const char*inpu,char*output) 其中 input 是输入字符串,output 是输出字符串 #include #include #include using namespace std; void stringchang(const char*,char*); int main() { char input[100],output[100]; cin.getline(input,100); stringchang(input,output); cout<
写的很差,懒得改了,不要看吧! #include #include using namespace std; int same(int); int main() { int num; cin>>num; int m=same(num); cout<0) { } n[n1++]=num%10; num/=10; for(int i=0;i=2) return 1; i1++; { } else { c=0; j=j-j1; j1=0; i1=i; } } } return 0; } 3. 求两个字符串的乘积,结果存到字符串中,例如字符串一中存的“657891”,字符串二中存的“521”,
分别将字符串中的字符转换成整型数字,进行计算后,再转换成字符类型存储起来 函数为 void mul(char *input1,int n,char *input2, int m,char *output) 其中 input1 和 input2 是输入,n 是 input1 的长度,n2 是 input2 的长度。Output 是输出 #include #include #include using namespace std; void mul(char*,int,char*,int,char*); int main() { char input1[100],input2[100],output[100]; cin>>input1>>input2; int n=strlen(input1); int m=strlen(input2); mul(input1,n,input2,m,output); cout<0) { } output[p3++]=ou%10+'0'; ou/=10; output[p3]='\0'; for(int i=0;i
} 4.删除子串,只要是原串中有相同的子串就删掉,不管有多少个,返回子串个数。 #include #include using namespace std; int deletesub(string &str,const string &sub,int); int main() { string str,sub; getline(cin,str); getline(cin,sub); int n=sub.size(); int num=deletesub(str,sub,n); cout< using namespace std; struct node{ int num; node *next; }; node *creat(int n) { node *q,*p,*head=NULL; for(int i=1;i<=n;i++) {
p=new node; p->num=i; if(head==NULL) head=p; else q->next=p; q=p; } p->next=head; return p; } int main() { int n,k,m; cin>>n>>k>>m; node *l,*q; l=creat(n); q=l; l=l->next; for(int i=1;inext; } while(l->next!=l) { } for(int i=1;inext; cout<num<<"->"; q->next=l->next; delete l; l=q->next; cout<num< #include using namespace std; int main() { string str;
getline(cin,str); int m=str.size(); for(int i=0;i #include using namespace std; int array_compare(int,int*,int,int*); int main() { int len1,len2; cin>>len1; int *array1=new int[len1]; for(int i=0;i>array1[i]; cin>>len2; int *array2=new int[len2]; for(int i=0;i
cin>>array2[i]; } int m=array_compare(len1,array1,len2,array2); cout<=0&&j>=0) { if(array1[i]!=array2[j]) num++; i--; j--; } return num; } 8.约瑟夫环变种: 输入一个由随机数组成的数列(数列中每个数均是大于 0 的整数,长度已知),和初始计数值 m。从数列首位 置开始计数,计数到 m 后,将数列该位置数值替换计数值 m,并将数列该位置数值出列,然后从下一位置从新 开始计数,直到数列所有数值出列为止。如果计数到达数列尾段,则返回数列首位置继续计数。请编程实现上 述计数过程,同时输出数值出列的顺序 比如: 输入的随机数列为:3,1,2,4,初始计数值 m=7,从数列首位置开始计数(数值 3 所在位置) 第一轮计数出列数字为 2,计数值更新 m=2,出列后数列为 3,1,4,从数值 4 所在位置从新开始计数 第二轮计数出列数字为 3,计数值更新 m=3,出列后数列为 1,4,从数值 1 所在位置开始计数 第三轮计数出列数字为 1,计数值更新 m=1,出列后数列为 4,从数值 4 所在位置开始计数 最后一轮计数出列数字为 4,计数过程完成。 输出数值出列顺序为:2,3,1,4。 • 要求实现函数: void array_iterate(int len, int input_array[], int m, int output_array[]) 【输入】 int len:输入数列的长度; int intput_array[]:输入的初始数列 int m:初始计数值 【输出】 int output_array[]:输出的数值出列顺序 【返回】 无 • 示例 输入:int input_array[] = {3,1,2,4},int len = 4, m=7 输出:output_array[] = {2,3,1,4} #include using namespace std; struct node{ int num; node *next; };
node *creat(int len,int *input_array) { node *p,*q,*head=NULL; for(int i=0;inum=input_array[i]; if(head==NULL) head=p; else q->next=p; q=p; p->next=head; return p; } int main() { int len,m,n=0; cin>>len; int *input_array=new int[len]; for(int i=0;i>input_array[i]; int *output_array=new int[len]; cin>>m; node *l=creat(len,input_array); node *q=l; l=l->next; while(l->next!=l) { } for(int i=1;inext; m=l->num; output_array[n++]=l->num; q->next=l->next; delete l; l=q->next; output_array[n]=l->num; delete l; for(int i=0;i
分享到:
收藏