📄 剧场.cpp
字号:
/*
2. 设一个剧场有N*N个座位,顾客买票时可以提出任意有效的座号请求。下面
用二维数组a[N][N]模拟剧场中的座位,a[i][j]等于0表示第i排第j列(0≤I ,
j≤N-1)的票尚未售出。
函数int Find ( int a[][N] , int R , int *row , int *col )的功能是:
在部分票已售出的情况下,找出剧场中的R*R个空座位,要求这些座位的排列形
成一个正方形。若找到满足要求的一个座位排列,则函数返回1,并算出该正方
形左上角的行、列号;若未找到,返回0;
*/
#include <iostream>
#include <stdlib.h>
using namespace std;
#define N 20
int Find ( int a[][N] , int R , int *row , int *col);
int ifok(int a[][N],int R,int i,int j);
void main()
{
int a[N][N];
int i,j,R,row=0,col=0;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
a[i][j]=rand()%2;
cout<<a[i][j]<<" ";
}
cout<<endl;
}
cout<<"请输入你想要的位子数(R*R) R=";
cin>>R;
if(R<0||R>20)
{
cout<<"R越界"<<endl;
return;
}
if(Find(a,R,&row,&col))
{
cout<<"Have find! set is a["<<row<<"]["<<col<<"]"<<endl;
}
else
{
cout<<"haven't find"<<endl;
}
}
int Find( int a[][N] , int R , int *row , int *col)
{
int i=0,j=0;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
if(a[i][j]==0)
{
if(ifok(a,R,i,j))
{
*row=i;
*col=j;
return 1;
}
else
continue;
}
}
}
if(i==N)
return 0;
}
int ifok(int a[][N],int R,int i,int j)
{
int tmpi=i;
int tmpj=j;
for(i=tmpi;i<tmpi+R;i++)
{
for(j=tmpj;j<tmpj+R;j++)
{
if(a[i][j]!=0)
return 0;
}
}
if(i==tmpi+R)
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -