一道C语言算法题出了问题
本文介绍了一道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
解决方案
在代码设计上有问题,没有考虑,当程序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);
}
这篇关于一道C语言算法题出了问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文