首页 > 学院 > 开发设计 > 正文

蓝桥杯——2015 西工大计算机研究生机试真题(节选,2017.2.7)

2019-11-11 02:05:49
字体:
来源:转载
供稿:网友

1.

源代码:

#include <stdio.h>void FindtheMinimum(int a,int b,int c){	int t;	if(a>b)		t=a,a=b,b=t;	if(b>c)		t=b,b=c,c=t;	if(a>b)		t=a,a=b,b=t;	PRintf("%d/n",a);}int main(){	int a,b,c;	while(scanf("%d %d %d",&a,&b,&c)!=EOF)		FindtheMinimum(a,b,c);	return 0;}程序截图:

2. 

源代码:

#include <stdio.h>#define maxn 25int main(){	int i,j,a[maxn][maxn];	int m,n,N;	char direction;	while(scanf("%d",&N)!=EOF)	{		for(i=0;i<N;i++)			for(j=0;j<N;j++)				a[i][j]=0;		scanf("%d %d",&m,&n);		scanf("%c",&direction);		if(direction=='w')		{			if(m-1>=0 && m-1<N)				printf("Y/n");			else				printf("N/n");		}		else if(direction=='s')		{			if(m+1>=0 && m+1<N)				printf("Y/n");			else				printf("N/n");		}		else if(direction=='a')		{			if(n-1>=0 && n-1<N)				printf("Y/n");			else				printf("N/n");		}		else if(direction=='d')		{			if(n+1>=0 && n+1<N)				printf("Y/n");			else				printf("N/n");		}	}	return 0;}程序截图:

3. 

源代码:

#include <stdio.h>#define maxn 105int main(){	int i,j,a[maxn][maxn];	int m,n,N,direction;	int nextloc;	while(scanf("%d",&N)!=EOF)	{		for(i=0;i<N;i++)			for(j=0;j<N;j++)				scanf("%d",&a[i][j]);		scanf("%d %d",&m,&n);		scanf("%d",&direction);		if(direction==0)		{			nextloc=a[m][n-1];			if(n-1>=0 && n-1<N && nextloc==0)				printf("Y/n");			else				printf("N/n");		}		else if(direction==1)		{			nextloc=a[m+1][n];			if(m+1>=0 && m+1<N && nextloc==0)				printf("Y/n");			else				printf("N/n");		}		else if(direction==2)		{			nextloc=a[m][n+1];			if(n+1>=0 && n+1>N && nextloc==0)				printf("Y/n");			else				printf("N/n");		}		else if(direction==3)		{			nextloc=a[m-1][n];			if(m-1>=0 && m-1<N && nextloc==0)				printf("Y/n");			else				printf("N/n");		}	}	return 0;}程序截图:

4. 

源代码:

#include <stdio.h>#include <string.h>#define maxlen 256void GetNextval(char b[],int nextval[]){	int j=0,k=-1;	int lenb=strlen(b);	nextval[0]=-1;	while(j<lenb)	{		if(k==-1 || b[j]==b[k])		{			j++,k++;			if(b[j]!=b[k])				nextval[j]=k;			else				nextval[j]=nextval[k];		}		else			k=nextval[k];	}}void Replace(char a[],char b[],char c[]){	int nextval[maxlen],i=0,j=0;	int lena=strlen(a),lenb=strlen(b),lenc=strlen(c);	int t;                               //t记录匹配点 	GetNextval(b,nextval);	while(i<lena && j<lenb)	{		if(j==-1 || a[i]==b[j])		{			i++;			j++;		}		else			j=nextval[j];	}	if(j>=lenb)		t=i-lenb;	for(i=0;i<t;i++)		printf("%c",a[i]);	printf("%s",c);	for(i=t+lenb;i<lena;i++)		printf("%c",a[i]);	printf("/n");}int main(){	char a[maxlen],b[maxlen],c[maxlen];	while(scanf("%s",a)!=EOF)	{		scanf("%s",b);		scanf("%s",c);		Replace(a,b,c);	}	return 0;}程序截图:

===================================我是分割线===================================

回顾与拓展:串的模式匹配(KMP算法)

5. 输入主串source与模式串obj(长度<=1000),在主串中寻找模式串,找到返回第一个匹配主串的首字符下标,否则返回-1

源代码:

#include <stdio.h>#include <string.h>#define maxlen 1010void GetNextval(char obj[],int nextval[])        //使用修正后的求nextval数组算法 {	int j=0,k=-1;	int len=strlen(obj);	nextval[0]=-1;	while(j<len)	{		if(k==-1 || obj[j]==obj[k])		{			j++,k++;			if(obj[j]!=obj[k])				nextval[j]=k;			else				nextval[j]=nextval[k];		}		else			k=nextval[k];	}}void KMP(char source[],char obj[]){	int nextval[maxlen];	int i=0,j=0;	int len1=strlen(source),len2=strlen(obj);	GetNextval(obj,nextval);	while(i<len1 && j<len2)	{		if(j==-1 || source[i]==obj[j])			i++,j++;		else			j=nextval[j];	}	if(j>=len2)		printf("%d/n",i-len2);	else		printf("-1/n");}int main(){	char source[maxlen],obj[maxlen];	while(gets(source)!=NULL)	{		gets(obj);		KMP(source,obj);	}	return 0;}程序截图:

6. 采用顺序结构存储串,编写一个算法计算指定子串在一个字符串中出现的次数,如果该子串不出现则为0

源代码:

#include <stdio.h>#include <string.h>#define maxlen 1010void Objcount(char source[],char obj[]){	int i=0,j=0,count=0;                          //count-子串出现次数 	int len1=strlen(source),len2=strlen(obj);	while(i<len1 && j<len2)	{		if(source[i]==obj[j])                     //主串与子串字符相同,继续匹配下一个字符		{			i++;			j++;		}		else                                      //否则主串、子串指针回溯,重新开始下一次匹配		{			i=i-j+1;			j=0;		}		if(j>=len2)                               //如果j已经达到了子串的长度,产生了一个匹配		{			count++;                              //匹配次数+1 			i=i-j+1;                              //主串从下一个位置开始继续匹配			j=0;                                  //子串从头开始匹配 		}	}	printf("%d/n",count);}int main(){	char source[maxlen],obj[maxlen];	while(gets(source)!=NULL)	{		gets(obj);		Objcount(source,obj);	}	return 0;}程序截图:


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表