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

来源:互联网 发布:郑州网站排名优化 编辑:程序博客网 时间:2024/05/21 07:03

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");elseprintf("N\n");}else if(direction=='s'){if(m+1>=0 && m+1<N)printf("Y\n");elseprintf("N\n");}else if(direction=='a'){if(n-1>=0 && n-1<N)printf("Y\n");elseprintf("N\n");}else if(direction=='d'){if(n+1>=0 && n+1<N)printf("Y\n");elseprintf("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");elseprintf("N\n");}else if(direction==1){nextloc=a[m+1][n];if(m+1>=0 && m+1<N && nextloc==0)printf("Y\n");elseprintf("N\n");}else if(direction==2){nextloc=a[m][n+1];if(n+1>=0 && n+1>N && nextloc==0)printf("Y\n");elseprintf("N\n");}else if(direction==3){nextloc=a[m-1][n];if(m-1>=0 && m-1<N && nextloc==0)printf("Y\n");elseprintf("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;elsenextval[j]=nextval[k];}elsek=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++;}elsej=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;elsenextval[j]=nextval[k];}elsek=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++;elsej=nextval[j];}if(j>=len2)printf("%d\n",i-len2);elseprintf("-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;}
程序截图:


1 0
原创粉丝点击