永发信息网

c语言 设计一个算法计算出广场可以建设的最大面积。

答案:2  悬赏:70  手机版
解决时间 2021-01-19 14:27
  • 提问者网友:酱爆肉
  • 2021-01-18 22:35
c语言 设计一个算法计算出广场可以建设的最大面积。
最佳答案
  • 五星知识达人网友:第四晚心情
  • 2021-01-18 23:41
#include 
#include 

int GetResult(int **a, int lenth, int width, int x, int y)
{
    int i, j;
    int row = 0, col = 0, size = 0;
    int flag = 0;
    if(a[x][y] != 0)
        return 0;
    
        for(i = y; i < lenth; i++)
        { 
            if(a[x][i] == 0)
                ++row;
            else
                break;
        }
        for(j = x; j < width; j++)
        {
            if(a[j][y] == 0)
                ++col;
            else
                break;
        }
    
    size = row>col ? col:row;
    for(i = x+1; i < x+size; i++)
    {
        for(j = y+1; j < y+size; j++)
        {
            //    第 x 行和第 y 列必为0
            if(a[i][j] != 0)
            {
                size = j-y+1;
                flag = 1;
                break; 
            }
        }
        if(flag == 1)
            break;
    }
    return size*size;
}

int main()
{
    int i, j;
    int lenth, width;
    int area, maxArea = 0;
    printf("请输入区域的长和宽:
");
    scanf("%d %d", &lenth, &width);
    
    int **a = (int**)malloc(sizeof(int*) * lenth);
    for(i = 0; i < width; i++)
        a[i] = (int*)malloc(sizeof(int) * width);
    
    printf("请输入0-1矩阵:
");    
    for(i = 0; i < lenth; i++)
        for(j = 0; j < width; j++)
            scanf("%d", &a[i][j]);
            
    for(i = 0; i < lenth; i++)
    {
        for(j = 0; j < width; j++)
        {    
            area = GetResult(a, lenth, width, i, j);
            if(area > maxArea)
                maxArea = area;
        }
    }
    printf("%d
", maxArea);
            
    return 0;
}
全部回答
  • 1楼网友:低血压的长颈鹿
  • 2021-01-19 01:08


#include 

#include 
int GetResult(int **a, int lenth, int width, int x, int y)
{
int i, j;
int row = 0, col = 0, size = 0;
int flag = 0;
if(a[x][y] != 0)
return 0;
for(i = y; i < width; i++)
{
if(a[x][i] == 0){
++row;
}
else
break;
}
for(j = x; j < lenth ; j++)
{
if(a[j][y] == 0)
++col;
else
break;
}
size = row>col ? col:row;
for(i = x+1; i < x+size; i++)
{
for(j = y+1; j < y+size; j++)
{
if(a[i][j] != 0)
{
size = j-y+1;
flag = 1;
break;
}
}
if(flag == 1)
break;
}
return size*size;
}
int main()
{
int i, j;
int lenth, width;
int area, maxArea = 0;
printf("请输入区域的长和宽: ");
scanf("%d %d", &lenth, &width);
int **a = (int**)malloc(sizeof(int*) * lenth);
for(i = 0; i < width; i++)
a[i] = (int*)malloc(sizeof(int) * width);
printf("请输入0-1矩阵: ");
for(i = 0; i < lenth; i++)
for(j = 0; j < width; j++)
scanf("%d", &a[i][j]);  // 输入矩阵
for(i = 0; i < lenth; i++)
{
for(j = 0; j < width; j++)
{
area = GetResult(a, lenth, width, i, j); // 获取面积
if(area > maxArea)
maxArea = area;
}
}
printf("maxArea=%d ", maxArea);
return 0;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯