面试必备经典CC++面试算法实例.docx

上传人:b****5 文档编号:7893080 上传时间:2023-01-27 格式:DOCX 页数:26 大小:27.12KB
下载 相关 举报
面试必备经典CC++面试算法实例.docx_第1页
第1页 / 共26页
面试必备经典CC++面试算法实例.docx_第2页
第2页 / 共26页
面试必备经典CC++面试算法实例.docx_第3页
第3页 / 共26页
面试必备经典CC++面试算法实例.docx_第4页
第4页 / 共26页
面试必备经典CC++面试算法实例.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

面试必备经典CC++面试算法实例.docx

《面试必备经典CC++面试算法实例.docx》由会员分享,可在线阅读,更多相关《面试必备经典CC++面试算法实例.docx(26页珍藏版)》请在冰豆网上搜索。

面试必备经典CC++面试算法实例.docx

面试必备经典CC++面试算法实例

Example2:

冒泡法排序

//maopao.cpp:

定义控制台应用程序的入口点。

#include"stdafx.h"

int_tmain(intargc,_TCHAR*argv[])

{

inta[10];

inti,j,t;

printf("input10numbers:

\n");

for(i=0;i<10;i++)

scanf("%d",&a[i]);

for(i=0;i<9;i++)//控制循环扫描共n-1次

for(j=0;j<9-i;j++)//每次比较次数为n-i-1次

{

if(a[j]>a[j+1])

{

t=a[j];

a[j]=a[j+1];

a[j+1]=t;

}

}

printf("thesortednumbers:

\n");

for(i=0;i<10;i++)

printf("%3d",a[i]);

return0;

}

Example3:

将一个二维数组行和列元素互换,存到另一个二维数组里。

//Exchange.cpp:

定义控制台应用程序的入口点。

#include"stdafx.h"

int_tmain(intargc,_TCHAR*argv[])

{

inta[2][3]={{1,2,3},{4,5,6}};

intb[3][2];

printf("arraya:

\n");

for(inti=0;i<2;i++)

{

for(intj=0;j<3;j++)

{

printf("%5d",a[i][j]);

b[j][i]=a[i][j];

}

printf("\n");

}

printf("arrayb:

\n");

for(inti=0;i<3;i++)

{

for(intj=0;j<2;j++)

printf("%5d",b[i][j]);

printf("\n");

}

return0;

}

Example4:

求一个3*4的矩阵的最大值,并输出其所在的行和列

#include"stdafx.h"

int_tmain(intargc,_TCHAR*argv[])

{

inti,j,row=0,colum=0,max;

inta[3][4]={{10,5,36,2},{-18,6,28,-36},{2,15,-10,-89}};

max=a[0][0];

for(i=0;i<3;i++)

for(j=0;j<4;j++)

if(a[i][j]>max)

{

max=a[i][j];

row=i;

colum=j;

}

printf("max=%d,row=%d,cloum=%d",max,row,colum);

return0;

}

Example5:

输出一个字符串

#include"stdafx.h"

int_tmain(intargc,_TCHAR*argv[])

{

chara[15]={'h','o','w','','a','r','e','','y','o','u'};

for(inti=0;i<11;i++)

printf("%c",a[i]);

printf("\n");

return0;

}

注意单词之间的空格赋值

Example6:

利用一个scanf函数输入多个字符串,以空格分开

#include"stdafx.h"

int_tmain(intargc,_TCHAR*argv[])

{

charstr1[5],str2[5],str3[5],str4[13];

printf("inputthreestring:

\n");

scanf("%s%s%s",str1,str2,str3);

printf("%5s%5s%5s\n",str1,str2,str3);

printf("inputonestring:

\n");

scanf("%s",str4);

printf("%s\n",str4);

return0;

}

注:

把以n个用空格分开字符串输入给一个字符串数组,则其实数组只接收到第一个空格之前的内容,违背愿望。

Example7:

输入一行字符串,统计其中有多少个单词,单词之间用空格分开

#include"stdafx.h"

int_tmain(intargc,_TCHAR*argv[])

{

charstr[100];

intnum=1;

intword;

printf("inputstrings:

\n");

gets(str);

for(inti=0;str[i]!

='\0';i++)

/*if(str[i]=='')num++;若只用着一个判断,则如果输入字符串时不小心敲进了很多空格,则结果不对*/

if(str[i]=='')word=0;

elseif(word==0)

{

word=1;

num++;

}

printf("Thereare%dwordsintheline.\n",num);

return0;

}

Example8:

找出3个字符串中的最大者

#include"stdafx.h"

#include

int_tmain(intargc,_TCHAR*argv[])

{

charstring[20];

charstr[3][20];

printf("inputthreestrings:

\n");

for(inti=0;i<3;i++)

scanf("%s",str[i]);

if(strcmp(str[0],str[1])>0)strcpy(string,str[0]);

elsestrcpy(string,str[1]);

if(strcmp(str[2],string)>0)strcpy(string,str[2]);

printf("\nthelargeststringis:

\n%s\n",string);

return0;

}

Example9:

选择法排序

#include"stdafx.h"

voidsort(inta[],intn)

{

intmin,t;

for(inti=0;i

{

min=i;

for(intj=i+1;j

{

if(a[min]>a[j])

{

min=j;

}

}

if(min!

=i)

{

t=a[min];

a[min]=a[i];

a[i]=t;

}

}

}

int_tmain(intargc,_TCHAR*argv[])

{

inta[10]={3,9,1,8,2,10,7,5,4,6};

sort(a,10);

for(inti=0;i<10;i++)

printf("%4d",a[i]);

return0;

}

Example10:

求一个3*3的整形矩阵对角线元素之和

#include"stdafx.h"

intcatercornerSum(inta[3][3])

{

intsum=0;

for(inti=0;i<3;i++)

{

sum+=a[i][i];

sum+=a[i][2-i];

}

sum-=a[1][1];

returnsum;

}

int_tmain(intargc,_TCHAR*argv[])

{

inta[3][3]={{1,2,3},{4,5,6},{7,8,9}};

intsum;

sum=catercornerSum(a);

printf("%d\n",sum);

return0;

}

Example11:

找出一个数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小

#include"stdafx.h"

#include

usingnamespacestd;

int_tmain(intargc,_TCHAR*argv[])

{

inta[3][4]=

{{124,25,100,31},{20,96,216,95},{14,25,54,1}};

intb[3];

intc[4];

charx=NULL;

chary=NULL;

/*cout<<"pleaseinput12integernumbers:

"<

for(inti=0;i<3;i++)

{

for(intj=0;j<4;j++)

{

cin>>a[i][j];

}

}*/

intt=0;

for(inti=0;i<3;i++)

{

t=a[i][0];

b[i]=0;

for(intj=0;j<4;j++)

{

if(a[i][j]>t)

{

t=a[i][j];

b[i]=j;

}

}

}

for(intj=0;j<4;j++)

{

t=a[0][j];

c[j]=0;

for(inti=0;i<3;i++)

{

if(a[i][j]

{

t=a[i][j];

c[j]=i;

}

}

}

for(inti=0;i<3;i++)

{

for(intj=0;j<4;j++)

{

if((i==c[j])&&(j==b[i]))

{

x=i+1+48;

y=j+1+48;

t=a[i][j];

}

}

}

if((x==NULL)&(y==NULL))

cout<<"该二位数组没有鞍点"<

else

{

cout<<"鞍点位置:

("<

cout<<"鞍点位置数字为:

"<

}

return0;

}

说明:

分别记下每一行最大值及每一列最小值的位置,该两位置重复的点即是鞍点

字符串

Example1:

编写字符串拷贝函数strcpy

//strcpy.cpp:

定义控制台应用程序的入口点。

//

#include"stdafx.h"

 

char*strcpy(char*strDest,constchar*strSrc)

{

char*address=strDest;

while((*strDest++=*strSrc++)!

='\0')

NULL;

returnaddress;

}

int_tmain(intargc,_TCHAR*argv[])

{

charstr1[]="asfasdfasfa";

intlength=0;

char*str2=newchar[20];

strcpy(str2,str1);

printf("str2:

%s\n",str2);

printf("copysuccessfully!

\n");

delete[]str2;

return0;

}

Example2:

字符串连接函数strcat

//strcat.cpp:

定义控制台应用程序的入口点。

//

#include"stdafx.h"

 

char*strcat(char*str1,char*str2)

{

inti=0;

intj=0;

while(str1[i])

i++;

while(str2[j])

j++;

char*str3=newchar[i+j+1];

for(intm=0;m

{

str3[m]=str1[m];

}

for(intm=0;m

{

str3[m+i]=str2[m];

}

str3[i+j]='\0';

returnstr3;

}

int_tmain(intargc,_TCHAR*argv[])

{

char*str1="ggg";

char*str2="bbbb";

char*str3=newchar[20];

str3=strcat(str1,str2);

printf("thestringstr3is:

%s\n",str3);

delete[]str3;

return0;

}

Example3:

删除已经在str2中出现过的str1中的字符

#include"stdafx.h"

#include

int_tmain(intargc,_TCHAR*argv[])

{

charstr1[]="ahadfggklgfd";

char*str2="dff";

char*str3=newchar[10];

intlength1=int(strlen(str1));

intlength2=int(strlen(str2));

intm=0;

for(inti=0;i

{

for(intj=0;j

{

if(str1[i]==str2[j])//str1中的该字符在str2中出现

{

str1[i]=str2[0];//将所有在str2中出现过的str1中的字符全部改为str2的第一字符值

j=length2;//跳出内层for循环

}

}

}

for(inti=0;i

{

if(str1[i]!

=str2[0])

{

str3[m]=str1[i];

m+=1;

}

}

str3[m]='\0';//将str3最后加上'\0',str3即为删除后的结果

printf("%s\n",str3);

delete[]str3;

return0;

}

Example4:

字符串倒置,“Justdoit”变为“tiodtsuJ”

#include"stdafx.h"

#include

voidinversion(char*p1,char*p2)

{

inti;

intlength=int(strlen(p1));

for(i=0;i

{

p2[i]=p1[length-1-i];

}

p2[i]='\0';

}

int_tmain(intargc,_TCHAR*argv[])

{

char*p1="Justdoit";

char*p2=newchar[20];

inversion(p1,p2);

printf("%s\n",p2);

return0;

}

Example5:

将字符串中的单词倒置,“Justdoit”变为“itdoJust”

#include"stdafx.h"

//定义一个字符串倒置函数,其中参数包括字符串及需要到置部分的起点和终点

voidreverse(charstr[],intfrom,intto)

{

intlength=to-from;

chars;

for(inti=0;i

{

s=str[from+i];

str[from+i]=str[to-i];

str[to-i]=s;

}

}

int_tmain(intargc,_TCHAR*argv[])

{

charstr1[]="Makeprogresseverydaytolearnabcabcdabcde";

intlength=0;

while(str1[length])

{

length++;

}

reverse(str1,0,length-1);//先将str1整个颠倒

inti=0;//可理解为慢指针

intj=0;//可理解为快指针

while(str1[j])//扫描倒置过的str1

{

if(j<=length)//当还没扫描完str1时

{

while(str1[j]!

=''&&str1[j])//碰到空格及为一个单词的倒置,再给颠倒回来就可

{

j++;

}

reverse(str1,i,j-1);

j++;//将快指针指向空格后的第一个字符

i=j;//将满指针指向下一个单词,以便接下来将单词颠倒回来

}

else//说明已经扫描完

{

j--;//将快指针指向字符串后的'\0',跳出while循环

}

}

printf("%s\n",str1);

return0;

}

Example6:

统计字符串每个字符出现的次数

#include"stdafx.h"

#include

usingnamespacestd;

int_tmain(intargc,_TCHAR*argv[])

{

charstr1[50]="ddfd;ljk90()asdHSMAR___!

@#$%^&*()";

char*p=newchar[50];

inttimes;

inta[50];

inti=0;

intt=0;//用于判断字符是否重复出现

intm=0;

intlength1=0;

while(str1[i]!

='\0')

{

length1++;

i++;

}

p[m]=str1[0];

intlength2=1;//length2为p指向字符串的长度,初始为

//去掉字符串str1中重复出现过的字符(保留一个即可),把剩余的字符保存到指针p指向的动态存储区

for(inti=1;i

{

t=0;

for(intk=0;k

{

if(str1[i]==p[k])t++;//说明该字符重复,t加

}

if(t==0)//t=0说明该字符没出现过,存入动态存储区

{

m++;

p[m]=str1[i];

length2++;

}

}

p[m+1]='\0';

//通过与p指向的字符串比较,即可得出每一个字符出现过的次数

for(inti=0;i

{

a[i]=0;

for(intj=0;j

{

if(p[i]==str1[j])a[i]++;

}

}

for(inti=0;i

printf("字符串%c出现次数为:

%d\n",p[i],a[i]);

return0;

}

 

Example7:

将整型数据转换成字符串类型

说明:

要将整型数据转换成字符串,首先将整型数据各个数位进行拆分,然后存储到一个数组当中,结尾处补‘\0’。

例如要将12345转换成字符串,主要思路是将12345先于10取余,结果为5,将5转成字符存储到数组当中,然后将1234除以10再与10取余得到十位上的数4,将4存储到数组中,以此类推。

得到数组54321,再将数组逆序返回。

循环的条件控制是判断整数与10相除的结果,如果是0的话结束循环。

代码:

//E4.cpp:

Definestheentrypointfortheconsoleapplication.

//

#include"stdafx.h"

//将int转换为string

char*ToString(intnumber)

{

char*str=newchar[6];

inti=0;

while(number/10!

=0)

{

str[i++]=number%10+48;//字符'0'比整数大

number=number/10;//去掉个位数

}

str[i++]=number+48;//将最后一个整数转换为字符

str[i]='\0';

for(intj=0;j<(i-1)/2;j++)//颠倒字符串“”

{

inta=str[j];

str[j]=str[i-1-j];

str[i-1-j]=a;

}

returnstr;

}

int_tmain(intargc,_TCHAR*argv[])

{

inta=12345;

char*str=ToString(a);

printf("%s\n",str);

return0;

}

注意:

当循环结束时整数的最高位还未转成字符,所以循环结束后要将最高位转成字符并且要在结尾加上‘\0’表示字符串结束。

Example8:

将字符串转换成整型数据

//ToInt.cpp:

定义控制台应用程序的入口点。

//

#include"stdafx.h"

intToInt(char*p)

{

intl=0;

inta[5];

while(p[l])

{

a[l++]=p[l]-

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 动态背景

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1