Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
333 views
in Technique[技术] by (71.8m points)

一道C语言算法题出了问题

#include <iostream>
#include <stdio.h> 
using namespace std;
bool a[241][241];
int main() {
    int x,y,k,i,m,n,mm,nn,ans=0;
    cin>>x>>y>>k;
    while(k--) {
        cin>>m>>n>>mm>>nn;
        for(;m<=mm;m++)
        for(;n<=nn;n++)
        if(!a[m][n]) {
            a[m][n]=1;
            ans++;
        }
    }
    return !printf("%d",ans);
}

在oj平台上做题 题目是在一个坐标系上的一个x y长宽左下角为原点的长方形内 覆盖k个长方形纸板
每个纸板都给出左上角和右下角坐标 最后计算x y内有多少上面覆盖着的点 为什么我上面写的这个程序不管用啊
例如输进去6 4 2 1 1 2 4 1 3 5 4 应该是14打出来却是4


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

在代码设计上有问题,没有考虑,当程序n满足最大值时,无论m到没到设定的最大值mm,程序中的ans都不会做++操作 同样 当m到达最大值时,无论n到没到设定的最大值nn,程序中的ans都不会做++操作,例如:按照你的输入,以(1,1)开始,在(2,4)内查找,当m=2时,n刚增加到3,还没有到最大值4,所以,导致程序出现问题。当然,修改之后,可能还会有问题,那应该是设计的问题,有卡片覆盖的问题,导致第二块板上的点,被覆盖。
纯手打的,不容易,望采纳!谢谢
附上代码:

include <iostream>

using namespace std;
bool a100;
void init()
{

int i,j;
for(i=0;i<100;i++)
    for(j=0;j<100;j++)
        a[i][j]=0;

}
int main()
{

int x,y,k,i,m,n,mm,nn,ans=1;//默认(0,0)一定在卡片内
cin>>x>>y>>k;
while(k--)  
{

    cin>>m>>n>>mm>>nn;
    for(;m<=mm;m++)
    {
        for(;n<=nn;n++)
        {
            if(!a[m][n])
            {
                a[m][n]=1;
                ans++;
            }
        }
        if(!a[m][n])
        {
        a[m][n]=1;
        ans++;
        }
    }
    init();
}

return !printf("%d",ans);
}
图片描述


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
...