当前位置:文档之家› 北京大学计算概论期末上机考试1

北京大学计算概论期末上机考试1

memset(dp,-1,sizeof(dp)); printf("%d\n",egg(n,m)); }
return 0; }
int max(int a,int b) {
return a>b?a:b; }
int egg(int n,int m) {
room(i-1,j); if(direction[castle[i][j]][1]==1&&map[i+1][j]==0)
room(i+1,j); if(direction[castle[i][j]][2]==1&&map[i][j-1]==0)
room(i,j-1); if(direction[castle[i][j]][3]==1&&map[i][j+1]==0)
int main() {
int i,j,max=0; scanf("%d",&M);
scanf("%d",&N); for(i=1;i<=M;i++)
for(j=1;j<=N;j++) scanf("%d",&castle[i][j]);
for(i=1;i<=M;i++) for(j=1;j<=N;j++) if(map[i][j]==0) { square[count]=0; room(i,j); count++; }
北京大学地球与空间科学学院 刘证源
else for(j=i;j<=L-1;j++) target[j]=source[j];
}
void mergeSort(int source[],int target[],int L) {
int l=1; while(l<L) {
mergePass(source,target,L,l); l=l*2; mergePass(target,source,L,l); l=l*2; } }
scanf("%d",&a[i]); mergeSort(a,b,N); printf("%lld\n",count); return 0; }
北京大学地球与空间科学学院 刘证源
void merge(int source[],int target[],int first,int mid,int last) {
k=k*100;
up=n5*(n4*(n3*(n2-1)+1)-1)+1; //分子
down=n1*n2*n3*n4*n5+1;
//分母
x=down;
y=up;
while(y>0) //求最大公约数约分分子分母
{ z=x%y; x=y; y=z; }
down=down/x;
up=up/x;
if(down>k) printf("not found");
scanf("%d",&v[i]); for(d=0;d<=V-1;d++)
北京大学地球与空间科学学院 刘证源
北京大学地球与空间科学学院 刘证源
for(i=1;i<=V-d;i++) {
j=i+d; if(d==0)
l[i][j]=0; else if(d==1)
l[i][j]=v[j]-v[i]; else
else
{
h=down;
A=up;
B=h-n1*A;
北京大学地球与空间科学学院 刘证源
C=n1*n2*A+(1-n2)*h; D=0-n1*n2*n3*A+(n3*(n2-1)+1)*h; E=n1*n2*n3*n4*A-(n4*(n3*(n2-1)+1)-1)*h; a[0]=A; a[1]=B; a[2]=C; a[3]=D; a[4]=E; for(i=0;i<4;i++)for(j=i+1;j<5;j++) if(a[i]==a[j]){flag=1;break;} if(flag) printf("not found"); else printf("%d %d %d %d %d %d",h,A,B,C,D,E); } system("pause"); }
城堡 #include<stdio.h> int castle[52][52],direction[16][4]={{1,1,1,1},{1,1,0,1},{0,1,1,1},{0,1,0,1},
{1,1,1,0},{1,1,0,0},{0,1,1,0},{0,1,0,0}, {1,0,1,1},{1,0,0,1},{0,0,1,1},{0,0,0,1}, {1,0,1,0},{1,0,0,0},{0,0,1,0},{0,0,0,0}}; int map[52][52]={0}; int square[2500]; int count=0,M,N; void room(int i,int j);
五户共井问题 #include <stdio.h> #include <stdlib.h>
main() {
int n1,n2,n3,n4,n5,h;
int A,B,C,D,E,k;
int up,down,i,j,x,y,z;
int a[5],flag=0;
scanf("%d %d %d %d %d %d",&k,&n1,&n2,&n3,&n4,&n5);
scanf("%d",&value[i]); for(i=1;i<=N;i++)
scanf("%d",&num[i]); dp[0][0]=1; for(i=1;i<=N;i++)
for(j=0;j+value[i]<=M;j++) if(dp[j][0]==1&&dp[j+value[i]][0]==0&&dp[j][i]<num[i]) { dp[j+value[i]][0]=1; dp[j+value[i]][i]=dp[j][i]+1; count++; }
走出迷宫 #include<stdio.h> #include<string.h> int map[102][102]={0}; int walk[102][102]; void maze(int i,int j);
int main() {
int N,M,i,j,x1,y1,x2,y2; char newline; memset(walk,10000,sizeof(walk)); scanf("%d %d\n",&N,&M); for(i=1;i<=N;i++) {
printf("%d\n",count); return 0; }
求排列的逆序数 #include<stdio.h> #include<stdlib.h> long long count=0;
int main() {
int N,i; int *a,*b; void mergeSort(int source[],int target[],int L); scanf("%d",&N); a=(int*)malloc(N*sizeof(int)); b=(int*)malloc(N*sizeof(int)); for(i=0;i<=N-1;i++)
} printf("%d\n",dp[V][P]); return 0; }
鸡蛋的硬度 #include<stdio.h> #include<string.h> # define INF 100000 int dp[101][11];
int main() {
int n,m; int egg(int n,int m); while(scanf("%d %d",&n,&m)==2) {
北京大学地球与空间科学学院 刘证源
maze(x1,y1); printf("%d\n",walk[x2][y2]); return 0; }
void maze(int i,int j) {
if((map[i-1][j]=='S'||map[i-1][j]=='T'||map[i-1][j]=='.')&&walk[i][j]+1<walk[i-1][j]) {
void mergePass(int source[],int target[],int L,int l) {
int i=0,j; while(i+2*l-1<L) {
merge(source,target,i,i+l-1,i+2*l-1); i+=2*l; } if(i+l-1<L-1) merge(source,target,i,i+l-1,L-1);
for(i=0;i<count;i++) if(square[i]>max) max=square[i];
printf("%d\n%d\n",count,max); return 0; }
相关主题