?? 劇場.cpp
字號:
/*
2. 設(shè)一個劇場有N*N個座位,顧客買票時可以提出任意有效的座號請求。下面
用二維數(shù)組a[N][N]模擬劇場中的座位,a[i][j]等于0表示第i排第j列(0≤I ,
j≤N-1)的票尚未售出。
函數(shù)int Find ( int a[][N] , int R , int *row , int *col )的功能是:
在部分票已售出的情況下,找出劇場中的R*R個空座位,要求這些座位的排列形
成一個正方形。若找到滿足要求的一個座位排列,則函數(shù)返回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<<"請輸入你想要的位子數(shù)(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;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -