下面的代码是自己写的,难免有纰漏之处,发现请指正,谢谢。
点击2011年北航计算机复试上机题
/************************************************************************** * Problem: 北航2011上机题1 * Copyright 2011 by Yan * DATE: * E-Mail: [email protected] ************************************************************************/ #include<stdio.h> int tab[20001];/*存储每个数的因数之和*/ int main() { int m,n; int i,j; int flag; for(i=1;i<20001;i++) { for(j=1;j<i;j++) { if(i%j==0) tab[i]+=j; } } while(scanf("%d %d",&m,&n)!=EOF) { flag=0; for(i=m;i<=n;i++) { for(j=m;j<i;j++) { if(tab[i]==j && tab[j]==i) printf("%d %d ",j,i),flag=1; } } if(flag==1) printf("\n"); if(flag==0) printf("NONE\n"); } return 0; }
上面使用打表的方式,这样打表只计算一遍,如果是多重输入的话推荐这样,如果是单重输入,可以将打表放在输入后,减少打表时间复杂度。
/************************************************************************** * Problem: 2011北航上机2题 * Copyright 2011 by Yan * DATE: * E-Mail: [email protected] ************************************************************************/ #include<stdio.h> #define MAX 21 #define MIN(a,b) (a)>(b)?(b):(a) int value[MAX][MAX]; int sub[MAX][MAX]; int main() { freopen("input","r",stdin); int m,n;/*原矩阵大小*/ int i,j; int x,y;/*替换矩阵大小 x行、y列*/ int posx,posy; int tmp1,tmp2; while(scanf("%d %d",&m,&n)!=EOF) { for(i=0;i<m;i++) for(j=0;j<n;j++) scanf("%d",&value[i][j]); scanf("%d %d",&x,&y); for(i=0;i<x;i++) for(j=0;j<y;j++) scanf("%d",&sub[i][j]); scanf("%d %d",&posx,&posy); tmp1=MIN(posx+x,m);tmp2=MIN(posy+y,n); for(i=posx-1;i<tmp1;i++) for(j=posy-1;j<tmp2;j++) value[i][j]=sub[i-posx+1][j-posy+1]; for(i=0;i<m;i++) { for(j=0;j<n;j++) printf("%d ",value[i][j]); printf("\n"); } } return 0; }
/************************************************************************** * Problem: 2011北航上机题3 * Copyright 2011 by Yan * DATE: * E-Mail: [email protected] ************************************************************************/ #include<stdio.h> char str[100]; int main() { freopen("input","r",stdin); int i,j; while(scanf("%s",str)!=EOF) { for(i=0;str[i]!='\0';i++) { if(str[i]=='-') { if(str[i-1]>='A' && str[i-1]<='Z' && str[i+1]>='A' && str[i+1]<='Z' && str[i+1]>str[i-1])/*大写字母扩展*/ { for(j=str[i-1]+1;j<str[i+1];j++) printf("%c",j); } else if(str[i-1]>='a' && str[i-1]<='z' && str[i+1]>='a' && str[i+1]<='z' && str[i+1]>str[i-1])/*小写字母扩展*/ { for(j=str[i-1]+1;j<str[i+1];j++) printf("%c",j); } else if(str[i-1]>='0' && str[i-1]<='9' && str[i+1]>='0' && str[i+1]<='9' && str[i+1]>str[i-1])/*数字扩展*/ { for(j=str[i-1]+1;j<str[i+1];j++) printf("%c",j); } else printf("-"); } else printf("%c",str[i]);/*不扩展*/ } printf("\n"); } return 0; }