各位老大哥,我在写机试测试题的时候遇到一个问题,同样一段逻辑和代码,使用本地函数调用时运行返回值为Wrong Answer,当把调用的函数直接写入main内后得到的是正确的返回值Accepted,我不太理解这两者之间的区别,请问是否有人可以帮忙解惑。以下是问题以及两份代码
华强种瓜
描述:
华强买到了不保熟的瓜,他很生气,遂决定……自己种瓜!
第二天,华强承包了一大片瓜田,他买来了 n2个保熟的西瓜种子,并且严格按照一个 n×n 米间距的网格进行种植。为了方便华强记忆,这个网格的坐标从 1 开始编号,到 n结束。为了让瓜保熟,他又买来了 k个洒水器,洒水器工作半径为 r米,安装在在网格中的某些种子的正上方。安装完这些洒水器后,华强很想知道现在他的瓜里面有多少能够被撒到水。
输入:
输入共包含 n+k行。第一行包含 3个整数 n、k 和 r,分别表示网格边距、洒水器数量和洒水器工作半径,题目保证 1≤n,k≤200。接下来 k行,每行两个整数 x 和 y,表示每个洒水器在网格中的坐标 (x,y)。
输出:
一行一个整数,表示被洒水器覆盖到的西瓜总数。
样例输入:
5 2 1
3 3
4 2
样例输出:
8
注释:
对于第一组样例,(3,3)上的洒水器工作半径可以覆盖到 (3,3) (4,3) (2,3) (3,2) (3,4) 的瓜。而 (4,2) 上的洒水器可以覆盖到 (4,2) (5,2) (3,2) (4,1) (4,3) 的瓜。去重后,共有 8 个瓜被覆盖到。
这是不通过的
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;
const int MAXSIZE = 201;
int arr[MAXSIZE][MAXSIZE];
int sign[MAXSIZE][2];
void Cover (int n,int k, int r) {
for (int s = 0; s < k; s++){
for (int i = 0; i <= r; i++){
for (int j = 0; j <= r; j++){
if ((float)sqrt((float)pow((float)i, 2) + (float)pow((float)j, 2)) <= r){
if (sign[s][0] - i >= 1 && sign[s][1] - j >= 1)
arr[sign[s][0] - i][sign[s][1] - j] = true;
if (sign[s][0] - i >= 1 && sign[s][1] + j <= n)
arr[sign[s][0] - i][sign[s][1] + j] = true;
if (sign[s][0] + i <= n && sign[s][1] - j >= 1)
arr[sign[s][0] + i][sign[s][1] - j] = true;
if (sign[s][0] + i <= n && sign[s][1] + j <= n)
arr[sign[s][0] + i][sign[s][1] + j] = true;
}
}
}
}
}
int main () {
int n, k, r;
while (cin >> n >> k >> r){
memset(arr, false, sizeof(arr));
for (int i = 0; i < k; i++){
scanf("%d%d", &sign[i][0], &sign[i][1]);
arr[sign[i][0]][sign[i][1]] = true;
}
Cover(n,k, r);
int num = 0;
for (int i = 1; i <= n; i++){
for (int j = 1; j <= n; j++){
if(arr[i][j])
num++;
}
}
cout << num << endl;
}
return 0;
}
这是通过的
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;
const int MAXSIZE = 201;
int arr[MAXSIZE][MAXSIZE];
int sign[MAXSIZE][2];
int main () {
int n, k, r;
while (cin >> n >> k >> r){
memset(arr, false, sizeof(arr));
for (int i = 0; i < k; i++){
scanf("%d%d", &sign[i][0], &sign[i][1]);
arr[sign[i][0]][sign[i][1]] = true;
}
for (int s = 0; s < k; s++){
for (int i = 0; i <= r; i++){
for (int j = 0; j <= r; j++){
if ((float)sqrt((float)pow((float)i, 2) + (float)pow((float)j, 2)) <= r){
if (sign[s][0] - i >= 1 && sign[s][1] - j >= 1)
arr[sign[s][0] - i][sign[s][1] - j] = true;
if (sign[s][0] - i >= 1 && sign[s][1] + j <= n)
arr[sign[s][0] - i][sign[s][1] + j] = true;
if (sign[s][0] + i <= n && sign[s][1] - j >= 1)
arr[sign[s][0] + i][sign[s][1] - j] = true;
if (sign[s][0] + i <= n && sign[s][1] + j <= n)
arr[sign[s][0] + i][sign[s][1] + j] = true;
}
}
}
}
int num = 0;
for (int i = 1; i <= n; i++){
for (int j = 1; j <= n; j++){
if(arr[i][j])
num++;
}
}
cout << num << endl;
}
return 0;
}