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;}程序截图:
新闻热点
疑难解答