南瑞笔试题.docx
1 .找出一个数组中满足2N的元素#include<iostream>usingnamespacestd;intfind(inta,intlen);voidmainO(inta=l,2,3,5,7,8,16;intlen=sizeof(a)sizeof(int);计算数组中元素的个数;cout<<find(a,len)<<endl;intfind(inta,intlen)(inti;intcount=0;for(i=0;i<len;i+)(if(0=(ai(ai-l)且运算count+;)returncount;)2 .报数:共n个人从1编号,设从第S个人报号,报到In出队3 .统计一个数二进制表达中0的个数(首位1之前0不计)本题关键是如何把十进制数转换成二进制ftinclude<iostream>usingnamespacestd;intfun(intnum);intmain()intnum;cout<<zzPleaseenterainteger:n,z;cin>>num;cout<<fun(num)<<endl;return0;intfun(intnum)(intcount=0;inti=0;while(num)(if(num&1)(count+;)num=num»1;i+;)return(i-count);)4 .镜像反转二进制表达式,并输出十进制值ttinclude<iostream>usingnamespacestd;intfunc(inta);main()(intn;cout<<,zenter:;cin>>n;cout<<func(n)<<endl;intfunc(inta)(intval=0;inttemp;inti;intn=0;intb100;while(a!-0)(temp=(a&l);bn÷+=temp;a=(a»l);)for(i=0;i<n;i+)val=val*2+bi;returnval;5,判断一个字符串中。是否配对ttinclude<iostream>usingnamespacestd;boolmatch(chara,intlength);intmain()charb100;intIen;boolm;cout<<,zenter:z,<<endl;gets(b);len-strlen(b);m=match(b,len);if(m)cout<<,zmatch,z<<endl;elsecout<<yznonmatchz,<<endl;return0;boolmatch(chara,intlength)(char*p=a;intcount1=0;intcount2=0;while(*p!,0,)if(*p=,(,)count1+;if(*p=')')count2+;if(count2>countl)returnfalse;P÷+;)if(countl=count2)returntrue;elsereturnfalse;)6 .链表倒序Node*Reverse(Node*head)Node*pl,*p2,*p3;if(head=NULLIhead->NULL)returnhead;pl=head;p2=pl->next;while(p2)p3=p2->next;p2->next=pl;P1=P2;p2=p3;head->next=NULL;head-pl;returnhead;)7 .查找子字符串个数8 .关于数组的循环移位include<iostream>usingnamespacestd;voidfunc(int*p,intn,intk);voidmain()inta=l,2,3,4,5);inti;func(a,5,2);/cout<<a0<<al<<a2<<a3<<a4<<endl;for(i=0;i<5;i+)printf("%d",ai);)voidfunc(int*p,intn,intk)inttemp;inti;k=k%n;if(k>=O)(while(k)(temp=pn-l;for(i=n-l;i>0;i一)pi=pi-l;p0=temp;k一;)elseif(k<O)k=k*(-l);while(k)(temp=p0;for(i=l;i<n;i+)pi-U=pi;pn-l=temp;)9 .将两个大型整数相乘(设它们分别存储在Chara100,b100中)10 .将字符串中的所有字母都替换成该字母的下一个字母include<iostream>usingnamespacestd;#include<ctype.h>include<stdio.h>#include<string.h>voidfunc(char*p);voidmain()(charstrl20;Printf("enter:");gets(strl);func(strl);puts(strl);)voidfunc(char*p)(charch;while(*p)ch=*p;if(isalpha(*p)&&(*p!=,z,)&&(*p!='Z,)* p=ch+l;elseif(*p=,z,)* p='a,;elseif(*p='Z')* P=,A,;P+;11 .回文判断#include<iostream>usingnamespacestd;boolfunc(intm);voidmain()(intm;cout<<*enteranumber:*«endl;cin>>m;cout<<func(m)<<endl;boolfunc(intm)(inti,n=0;i=m;while(i)(n=n*10+i%10;i=10;if(m=n)returntrue;returnfalse;12 .将一个“1234”的字符串转化为1234整型#include<iostream>#include<stdio.h>#include<string.h>usingnamespacestd;intfunc(chara);voidmainO(chara='l','2','3','4','0'/cout<<z,1234zz<<endl;cout<<func(a)<<endl;)intfunc(chara)(inti=0;intsum=0;while(ai!=>0,)(sum=sum*10+(ai-,0,);i+;)returnsum;13 .求一个二维数组每列的最小值ftinclude<iostream>include<stdio.h>usingnamespacestd;voidfunc(intp34,intq);voidmain()(intb4;inta34=12,25,10,45,11,23,54,5,9,33,43,32;func(a,b);cout<<,z每列的最小值分别是*<<b0<<*<<bl<C,"<<b2C,*<<b3<<endl;voidfunc(intp34,intq)(inti;intj;for(j=0;j<4;j+)(qj=pOj;for(i=0;i<3;i+)(if(qj>pij)(qj=pij;)14 .连续字符统计(如AABCCCD:A2B1C3D1)#include<iostream>#include<stdio.h>#include<string.h>usingnamespacestd;voidfunc(charstr,intlen);voidmain()(charstr20;intIen;cout<<,zenter:;gets(str);len=strlen(str);func(str,len);voidfunc(charstr,intlen)(intcount=l;inti;for(i=0;i<len;i+)(if(stri=stri+l)count+;elsecout<<stri<<count;count=l;)cout<<endl;15 .找出一个字符串中是否包含相同的子字符串(要求子串长度大于等于2)16 .已知:yiersansiwuIiuqibajiu分别对应123456789,对一段只含有这几种字符的字符串进行转换,转换成相应的数字如:yiersansan:123317删除字符串中字符个数最少的字符如:abcdd:dd18.两个超大整数相加高级:Lloo位字符串整数相乘2 .找出一段字符串中出现最频繁的单词3 .找出字符串中包含的最大回文4 .找出几个字符串中最长的公共子串voidfind(char*pln,intn)5 .替换原字符串中指定子串为新子串如:abcdeffgcd:将"cd"换成"d"abdeffgd6 .查找一个字符串中的指定子字符串个数char*p,*q=str;intcnt=O;while(l)P=Strstr(q,substr);返回子字符串substr在Str中第一次出现的位置if(p=NULL)break;ent+;q=p+2;子字符串长度为2returnent;7 .将一个数组循环移位,包括左移和右移8 .将一个字符串中的字母都改为下一个字母char*p=s,ch;while(*p)(ch=*p;if(isalpha(ch)&&ch!=z,&&ch!=Z,)* p-ch+l;elseif(ch-,z,)* P='a,;elseif(ch=,Z,)* p='A'P+;