【说明】   假设一个剧场有N*N个座位,顾客买票时可以提出任意有效的座号请求

题库2022-08-02  43

问题 【说明】  假设一个剧场有N*N个座位,顾客买票时可以提出任意有效的座号请求。下面用二维数组a[N][N]模拟剧场中的座位,a[j]等于0表示第i排第j列(0≤I , j≤N-1)的票尚未售出。  函数int Find ( int a[][N] , int R , int *row , int *col )的功能是:在部分票已售出的情况下,找出剧场中的R*R个空座位,要求这些座位的排列形成一个正方形。若找到满足要求的一个座位排列,则函数返回1,并算出该正方形左上角的行、列号;若未找到,返回0;  例如,一个7×7个座位的剧场如下图(a)所示,已售出部分座位的剧场如下图(b)所示,图中阴影部分表示已售出的座位,从图(b)中找出3×3正方形空座位如图(c)中斜线区所示。函数】  int Find ( int a[][N] , int R , int *row , int *col ) {  int i,j,k,c,t; int FOUND = 0;    for ( i=0 ; !FOUND && i     __(1)__ ;   while ( j     for ( k=0; ___(2)___ && a[j+k] = = 0; k++);/* 查找第i排连续的R个空座位 */   if ( k >=R ){ /* 查找第i排连续的R个空座位 */    for ( c=0 ; c < R ; c++ ) { /* 查找其余的R*(R-1)个座位 */    for ( t = 1 ; t < R ; t++ )   if (a[ __(3)__ ] [j+c] !=0 ) break;  if ( t   } /* for */ if ( ___(4)___ ) FOUND =1; } /* if */  ___(5)___ ; } /* while */ } /* for i */ if ( FOUND ) {    *row = i-1 ; *col = j-1; /* 计算正方形区域的左上角坐标*/   return 1;   } return 0; }()(15分,每空3分)【说明】  假设一个剧场有N*N个座位,顾客买票时可以提出任意有效的座号请求。下面用二维数组a[N][N]模拟剧场中的座位,a[j]等于0表示第i排第j列(0≤I , j≤N-1)的票尚未售出。  函数int Find ( int a[][N] , int R , int *row , int *col )的功能是:在部分票已售出的情况下,找出剧场中的R*R个空座位,要求这些座位的排列形成一个正方形。若找到满足要求的一个座位排列,则函数返回1,并算出该正方形左上角的行、列号;若未找到,返回0;  例如,一个7×7个座位的剧场如下图(a)所示,已售出部分座位的剧场如下图(b)所示,图中阴影部分表示已售出的座位,从图(b)中找出3×3正方形空座位如图(c)中斜线区所示。【函数】  int Find ( int a[][N] , int R , int *row , int *col ) {  int i,j,k,c,t; int FOUND = 0;    for ( i=0 ; !FOUND && i     __(1)__ ;   while ( j     for ( k=0; ___(2)___ && a[j+k] = = 0; k++);/* 查找第i排连续的R个空座位 */   if ( k >=R ){ /* 查找第i排连续的R个空座位 */    for ( c=0 ; c < R ; c++ ) { /* 查找其余的R*(R-1)个座位 */    for ( t = 1 ; t < R ; t++ )   if (a[ __(3)__ ] [j+c] !=0 ) break;  if ( t   } /* for */ if ( ___(4)___ ) FOUND =1; } /* if */  ___(5)___ ; } /* while */ } /* for i */ if ( FOUND ) {    *row = i-1 ; *col = j-1; /* 计算正方形区域的左上角坐标*/   return 1;   } return 0; }

选项

答案

解析 (1) j = 0
(2) k(3) i+t
(4) c==R
(5) j++
转载请注明原文地址:https://tihaiku.com/congyezige/2428389.html

最新回复(0)