首页 > 其他分享 >C语言:找最大交错正方形

C语言:找最大交错正方形

时间:2022-11-18 13:44:34浏览次数:45  
标签:arr return 格子 int C语言 正方形 交错

题目

图上有一个矩阵,由N*M个格子组成,这些格子由两种颜色构成,黑色和白色。请找到面积最大的且内部是黑白交错(即两个相连的正方形颜色不能相同)的正方形。

输入格式:第一行两个整数N和M,分别表示行数和列数。接下来有N行,每行M个数,0或1分别表示这个格子是黑色或白色。


代码


#include<stdio.h>

int n,m;

int check(int i,int j,int arr[n][m]){
    if((arr[i][j] != arr[i+1][j]) && (arr[i][j] != arr[i][j+1]) && (arr[i][j] == arr[i+1][j+1]))
        return 1;
    else
        return 0;
}

int scan(int size,int x,int y,int arr[n][m]){
    int i,j;
    int tmp=0;
    for(i=y;i<y+size;i++){
        for(j=x;j<x+size;j++){
            if(arr[i][j] == 1)
                tmp++;
        }
    }
    if(tmp == size * size)
        return 1;
    else
        return 0;
}

int main(){
    int i,j,lim,size,flg;
    int max=0;
    scanf("%d %d",&n,&m);
    int arr[n][m];
    int flag[n][m];

    lim = n>m?m:n;

    for(i=0;i<n;i++){
        for(j=0;j<m;j++){
            scanf("%d",&arr[i][j]);
            flag[i][j] = 0;
        }
    }

    for(i=0;i<n;i++){
        for(j=0;j<m;j++){
            printf("%d ",arr[i][j]);
        }
        printf("\n");
    }
    printf("-------------------------------\n");

    for(i=0;i<n-1;i++){
        for(j=0;j<m-1;j++){
            if(check(i,j,arr))
                flag[i][j] = 1;
            else
                flag[i][j] = 0;
        }
    }

    for(i=0;i<n;i++){
        for(j=0;j<m;j++){
            printf("%d ",flag[i][j]);
        }
        printf("\n");
    }


    for(size=1;size<lim+1;size++){
        flg = 0;
        for(i=0;i<n-size;i++) {
            for (j = 0; j < n - 1; j++) {
                if (scan(size, i, j, flag)) {
                    max = size + 1;
                    flg = 1;
                    break;
                }
            }
            if (flg == 1)
                break;
        }
    }

    printf("%d",max);

    return 0;
}

标签:arr,return,格子,int,C语言,正方形,交错
From: https://www.cnblogs.com/Shin404/p/16902813.html

相关文章

  • C语言:计算器
    题目请你编写一个科学计算器,支持多括号嵌套的四则运算,三角函数及指数对数运算功能可选(功能越多越好,指数的输入格式为a^b,对数的输入格式为logab,(其中a为底数))代码#in......
  • C语言:约瑟夫环
    题目n个人围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。 例如:  ......
  • C语言:IPv6地址压缩
    题目IPv6二进位制下为128位长度,以16位为一组,每组以冒号“:”隔开,可以分为8组,每组以4位十六进制方式表示。例如:2001:0db8:0000:0000:0123:4567:89ab:cdef是一个......
  • C语言:大数减法
    题目输入两个正整数(20位以上),计算两个数的差 例如:  输入:5626255555855853666554212125121252222521  输出:2050430437306314144代码#include<stdio.h>#inclu......
  • C语言:最小子数组和
    题目给你一个整数数组,请你找出一个具有最小和的连续子数组(子数组最少包含一个元素),返回其最小和。子数组是数组中的一个连续部分。 例如:  输入:-21-34-1-21-......
  • C语言:蛇形方阵
    题目给出一个不大于9的正整数n,输出n×n的蛇形方阵。从右上角填上1开始,逆时针方向依次填入数字,如同样例所示。注意每个数字都右对齐,中间用空格隔开。 例如:  ......
  • C语言:连续子串
    题目输入一个字符串,输出其所有的子串(不包含本身,输出每个子串间有空格)。子串:对于一个字符串变量,例如"adereegfbw",它的子串就是像"ader"这样可以从中找到的连续的字符......
  • C语言:规则排序
    题目输入正整数n,再输入n个正整数,先将其中的奇数从小到大排序,再将偶数从大到小排序。 例如:  输入:828522391125  输出:35911252282代码#in......
  • C语言:亲密数对
    题目输入N,N在2至3000之间,求2至N中的亲密数对。所谓亲密数对,就是A的因子和等于B,B的因子和等于A,且A≠B。如48和75是亲密数对。48的因子和为2+3+4+6......
  • C语言:学号输出
    题目用输出你的学号对应的八位数(每位数大小为55,每个数之间距离三个空格) 例如  输入12345678 输出: 代码#include<stdio.h>intmain(){charinp......