注册 登录
编程论坛 C语言论坛

不知道哪里出了错误

你爸边哭边 发布于 2020-02-06 21:49, 3129 次点击
链接:https://ac.
来源:牛客网

题目描述
现在给出一个正方形地图,其边长为n,地图上有的地方是空的,有的地方会有敌人。
我们现在有一次轰炸敌人的机会,轰炸敌人的区域是一个k*k的正方形区域,现在需要你解决的问题就是计算最多轰炸的敌人数量是多少。
输入描述:

本题包含多组数据,每组数据第一行输入两个数n,k。
接下来n行,每行n个数字,表示这个点上的敌人数量。
数据范围:
1<=n<=50
1<=k<=n
每个点上的敌人数量不超过100个(0<=a[i][j]<=100)。

输出描述:

每组数据输出包含一行,表示计算的结果。

示例1
输入
复制

4 2
1 1 0 0
1 1 0 0
0 0 2 2
0 0 2 2

输出
复制

8

说明

样例中,显然轰炸右下角那个部分能够击败最多的敌人



代码:
#include<cstdio>
#include<iostream>
using namespace std;
int n,k,mp[55][55],ans;
void solve(int i,int j){
    int s=0;
    if(i+k-1<n&&j+k-1<n)
    for(int x=i;x<i+k;x++)
        for(int y=j;y<j+k;y++)
            s=s+mp[x][y];
    if(s>ans){
        ans=s;
    }
}
int main(){
    cin>>n>>k;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            cin>>mp[i][j];
    for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
    solve(i,j);
    cout<<ans<<endl;
    return 0;
}

代码看了很多遍也看不出来哪里的逻辑有问题
12 回复
#2
叶纤2020-02-06 23:18
程序代码:
#include<cstdio>
#include<iostream>
using namespace std;
int n,k,mp[55][55],ans;
void solve(int i,int j,int n){//这里
    int s=0;
    if(i+k-1<n&&j+k-1<n)
    for(int x=i;x<i+k;x++)
        for(int y=j;y<j+k;y++)
            s=s+mp[x][y];
    if(s>ans){
        ans=s;
    }
}
int main(){
    cin>>n>>k;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            cin>>mp[i][j];
    for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
    solve(i,j,n);//这里
    cout<<ans<<endl;
    return 0;
}  
#3
你爸边哭边2020-02-07 12:17
回复 2楼 叶纤
这里n不是全局变量吗?不需要这样啊
#4
叶纤2020-02-07 12:37
程序代码:
#include<cstdio>
#include<iostream>
using namespace std;
int k,mp[55][55],ans;
void solve(int i,int j,int n){//这里
    int s=0;
    if(i+k-1<n&&j+k-1<n)
    for(int x=i;x<i+k;x++)
        for(int y=j;y<j+k;y++)
            s=s+mp[x][y];
    if(s>ans){
        ans=s;
    }
}
int main(){
    int n=0;
    cin>>n>>k;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            cin>>mp[i][j];
    for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
    solve(i,j,n);//这里
    cout<<ans<<endl;
    return 0;
}   
现在有必要了吧
#5
叶纤2020-02-07 12:52
全局定义变量只是定义了变量但并没有初始化,n的值只在主函数里有作用域,在solve里并没有作用,在solve里只是被定义了而已,你需要做的是在solve里使用n
#6
叶纤2020-02-07 14:08
。。。
#7
书生牛犊2020-02-07 16:04
C++我没学透彻,所以没法直接指出你代码的逻辑错哪了。
作用域怎么样的我不清楚。不过代码第四行,全局变量ans并没有初始化,这肯定是错了、另外变量n要么做全局变量,要么就传参进solve函数。
为什么代码在我本机可以通过,提交到牛客网总是提示答案错误
A:牛客网的每个编程题都有10-50组测试数据,你的代码在本机可以通过仅仅是通过了样例数据,可能存在边界条件考虑不周导致更多的测试数据没有通过,所以会返回答案错误。还有一种可能是你的代码没有处理多个测试用例,例如A+B的代码需要while循环处理
1
2
3
4
5
6
7
#include <stdio.h>
int main() {
    int a,b;
    while(scanf("%d %d",&a, &b) != EOF)
        printf("%d",a+b);
    return 0;
}

程序代码:
#include<cstdio>
#include<iostream>
using namespace std;
int k,mp[55][55],ans=0,n;
void solve(int i,int j){
    int s=0;
    for(int x=i;x<i+k;x++)
        for(int y=j;y<j+k;y++)
            s+=mp[x][y];
    if(s>ans){
        ans=s;
    }
}
int main(){
        cin>>n>>k;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            cin>>mp[i][j];
    for(int i=0;i<n-k+1;i++)
        for(int j=0;j<n-k+1;j++)
            solve(i,j);//这里
    cout<<ans<<endl;

    return 0;
}  


题目交代的很清楚,有多组测试案例。我觉得我改的这个逻辑应该对了的,只不过C++我不知道怎么写成多组循环判定的。

#8
叶纤2020-02-07 16:43
我实在看不出楼上的代码和楼主的代码有啥区别,就是初始化了一个ans
实话说了吧其实楼主的代码并没有错啊,
程序代码:
  #include<cstdio>
#include<iostream>
using namespace std;
int n,k,mp[55][55],ans;
void solve(int i,int j){
    int s=0;
    if(i+k-1<n&&j+k-1<n)
    for(int x=i;x<i+k;x++)
        for(int y=j;y<j+k;y++)
            s=s+mp[x][y];
    if(s>ans){
        ans=s;
    }
}
int main(){
    cin>>n>>k;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            cin>>mp[i][j];
    for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
    solve(i,j);
    cout<<ans<<endl;
    return 0;
}
在我的编译器测试结果是正确的啊,楼主可能想找优化版本的代码吧
#9
你爸边哭边2020-02-07 16:45
回复 7楼 书生牛犊
谢谢,ans是默认初始化为0了
#10
你爸边哭边2020-02-07 16:49
回复 8楼 叶纤
对啊,我看了半天也想不出来哪里错了,但是牛客网上的测试案例一个都没通过
#11
叶纤2020-02-07 17:16
回复 10楼 你爸边哭边
一般网站的题,要通过的话其实挺难的,一需要高效的算法,2,需要牛逼的解法,才能通过,你可能需要使代码变的更厉害才能通过吧(或者定义的时候写规范点)比如使每个变量初始化
  int n{},k{},mp[55][55]{},ans{}
#12
你爸边哭边2020-02-07 17:38
回复 8楼 叶纤
我看了下别人的代码,好像是多组输入的问题,感谢
#13
你爸边哭边2020-02-07 20:09
回复 8楼 叶纤
问题解决了,确实是多组输入的问题,谢谢了。
1