| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 582 人关注过本帖
标题:关于二维数组做参数的问题(附加一题)
只看楼主 加入收藏
幽幽球
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-6-1
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:3 
关于二维数组做参数的问题(附加一题)
【问题描述】

将一个矩形划分成N*M(1 <= N <= 2000,1 <= M <= 2000)个格子,每个格子有被占用和未被占用两种情况。将一个边长为i的正方形放入矩形中,要求正方形区域中不包含被占用的格子,问共有多少种合适的放置方案。

【输入数据和形式】

从标准输入读取一个整数i (1 < i <= min(M,N)),表示正方形的边长。之后读取N行,每行有M个整数,取值为0或1(1表示该格未被占用,0表示该格被占用)。

【输出数据和形式】

将矩形的放置方案数写到标准输出。

【输入样例】

2

1011

1111

1110

1110

【输出样例】

5
我写的...
#include <stdio.h>
#include <string.h>
char str[2000][2000];
int i;
int is_carre(char **str,int k,int m)
{
    int e,f;
    for (e=k;e<=k+i-1;e++)
        for(f=m;f<=m+i-1;f++)
            if (str[e][f]=='0')
                break;
            
    if(e==i&&f==i)
        return 1;
    else
        return 0;
}
int main()
{
    int numl=0,M,N,j=0,total,k,m,num=0; //str[k][m]
    char c,a[1000]={'\0'};
    scanf("%d",&i);
    while ((c=getchar())!=EOF)
    {
        if(c=='0'||c=='1')
        a[j++]=c;
        else if (c=='\n')
        numl++;
        else break;
    }
    //puts(a);
    M=numl;                         //M行
    total=strlen(a);
    N=total/numl;                   //N列
    //printf("%d %d",N,total);
    for(k=0;k<M;k++)
        for(m=0,j=k*N ; m<N,j<=(k+1)*N-1 ; m++,j++)
            str[k][m]=a[j];         //至此已经把a[]存成二维数组
    if (i<=M&&i<=N)
    {
        for(k=0;k<=M-i;k++){
            for(m=0;m<N-i;m++){
                if (is_carre(str,k,m)==1)
                    num++;
                else continue;}}
    }
    else
        printf("ERROR!");
    printf("%d",num);
    return 0;
}
就是那个is_carre函数像调用二维数组str[][],不知道怎么掉...这个程序运行什么都是0...
搜索更多相关主题的帖子: 正方形 
2011-06-01 22:52
thlgood
Rank: 5Rank: 5
等 级:职业侠客
帖 子:281
专家分:381
注 册:2010-9-24
收藏
得分:7 
这个很简单的,用一个指向数组的指针就行了
int (*p)[M] = Str;
is_carre(p, k, m);


这样的!

使用的时候就用p[x][y]就行了

[ 本帖最后由 thlgood 于 2011-6-1 23:48 编辑 ]

o(∩∩)Linux & Python 群:187367181
2011-06-01 23:47
幽幽球
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-6-1
收藏
得分:0 
回复 2楼 thlgood
谢谢啦~改过来了,但是程序有问题啊,根本进不了那个is_carre的循环...大神能否帮忙看看代码...(帮帮小白吧~
程序代码:
#include <stdio.h>
#include <string.h>
char str[2000][2000];
int i;
int (*p)[2000][2000] = str;

int is_carre(int *p,int k,int m)
{
    int e,f;
    for (e=k;e<=k+i-1;e++)
        for(f=m;f<=m+i-1;f++)
            if (str[e][f]=='0')
                break;
           
    if(e==i&&f==i)
        return 1;
    else
        return 0;
}
int main()
{
    int numl=0,M,N,j=0,total,k,m,num=0; //str[k][m]
    char c,a[1000]={'\0'};
    scanf("%d",&i);
    while ((c=getchar())!=EOF)
    {
        if(c=='0'||c=='1')
        a[j++]=c;
        else if (c=='\n')
        numl++;
        else break;
    }
    //puts(a);
    M=numl;                         //M行
    total=strlen(a);
    N=total/numl;                   //N列
    //printf("%d %d",N,total);
    for(k=0;k<M;k++)
        for(m=0,j=k*N ; m<N,j<=(k+1)*N-1 ; m++,j++)
            str[k][m]=a[j];         //至此已经把a[]存成二维数组
    if (i<=M&&i<=N)
    {
        for(k=0;k<=M-i;k++){
            for(m=0;m<N-i;m++){
                if (is_carre(p,k,m)==1)
                    num++;
                else continue;}}
    }
    else
        printf("ERROR!");
    printf("%d",num);
    return 0;
}
2011-06-02 09:18
ouyangouyang
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:273
专家分:579
注 册:2009-10-8
收藏
得分:7 
#include"stdio.h"
#include"stdlib.h"
#define m  4
#define n 4
main()
{
int i,j,a[20][20],p,x,y,flag,yes=0;
printf("请输入正方形边长");
scanf("%d",&p);
printf("输入数字");
for(i=0;i<m;i++)
    {
    for(j=0;j<n;j++)
        scanf("%d",&a[i][j]);
    }
    //*******************
for(i=0;i<m-p+1;i++)
    for(j=0;j<n-p+1;j++)

    {flag=1;
    for(x=i;x<i+p;x++)
    for(y=j;y<j+p;y++)
        {
        if(a[x][y]==0)
         flag=0;}
if(flag==1)yes++;
    }
printf("%d",yes);
    system("pause");
}
照我这么做就对了

多少恨, 昨夜梦魂中。 还似旧时游上苑, 车如流水马如龙; 花月正春风!
2011-06-02 10:17
快速回复:关于二维数组做参数的问题(附加一题)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012842 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved