话说你在走路上班时,经过一片种植萝卜的农田。这块田地的形状是一个矩形的网格。field的第i个元素的第j个字符,表示田地的第i行第j列的格子里包含的萝卜的数目。我们定义一个格子的特殊程度为它周围所有格子的萝卜个数的和; 它周围的格子包含它上下左右以及对角相邻的格子,最多有8个,在田地的边界上的格子会少一些。如果一个格子周围没有别的格子,则它的特殊程度为0。
话说你在走路上班时,经过一片种植萝卜的农田。这块田地的形状是一个矩形的网格。field的第i个元素的第j个字符,表示田地的第i行第j列的格子里包含的萝卜的数目。我们定义一个格子的特殊程度为它周围所有格子的萝卜个数的和; 它周围的格子包含它上下左右以及对角相邻的格子,最多有8个,在田地的边界上的格子会少一些。如果一个格子周围没有别的格子,则它的特殊程度为0。
请返回田地中特殊程度在A和B之间的所有格子的数目(包含A,B)。
Definition
Class: NumberField
Method: countSpecialNumbers
Parameters: string[], int, int
Returns: int
Method signature: int countSpecialNumbers(string[] field, int A, int B)
(be sure your method is public)
Constraints
- field 包含1个到50个元素,含1和50。
- field的每个元素包含1个到50个字符,含1和50。
- field的每个元素包含相同的字符数。
- field的每个元素的字符均为’0’到’9’之一。
- A的范围会在0到100之间,含0和100。
- B 的范围会在A到100之间,含A和100。
Examples
0)
{"111",
"111",
"111"}
4
8
Returns: 5
在这块田地里面,位于角落的格子的特殊程度是3,位于中间的格子的特殊程度是8,其他4个格子的特殊程度为5。
1)
{"111",
"141",
"111"}
4
8
Returns: 9
现在所有的9个格子都满足要求。
2)
{"2309",
"0239",
"2314"}
5
7
Returns: 3
3)
{"924",
"231",
"390",
"910",
"121"}
31
36
Returns: 0
4)
{"5"}
3
8
Returns: 0
5)
{"1234567890",
"1234567890",
"1234567890",
"1234567890",
"1234567890",
"1234567890",
"1234567890",
"1234567890",
"1234567890",
"1234567890",
"1234567890"}
3
18
Returns: 26
Code
namespace TopCoder
{
public static class NumberField
{
/// <summary>
/// Topcoder method
/// </summary>
/// <param name="Field"></param>
/// <param name="A"></param>
/// <param name="B"></param>
/// <returns></returns>
public static int countSpecialNumbers(string[] Field, int A, int B)
{
int r = 0;
if (A < 0 || A > 100)
{
r = 0;
}
else
{
if (B < A || B > 100)
{
r = 0;
}
else
{
int[][] fieldList = new int[Field.Length][];
for (int i = 0; i < Field.Length; i++)
{
string RowField = Field[i];
int k = RowField.Length;
int[] ColumnArr = new int[k];
for (int j = 0; j < RowField.Length; j++)
{
ColumnArr[j] = int.Parse(RowField[j].ToString());
}
fieldList[i] = ColumnArr;
}
int m = 0;
for (; m < fieldList.Length; m++)
{
for (int n = 0; n < fieldList[m].Length; n++)
{
int colLength = fieldList[m].Length;
int spicalCount = 0;
if (colLength > 1)
{
if (m == 0)
{
if (n == 0)
{
spicalCount = fieldList[m][n + 1] + fieldList[m + 1][n] + fieldList[m + 1][n + 1];
}
else if (n == fieldList[m].Length - 1)
{
spicalCount = fieldList[m][n - 1] + fieldList[m + 1][n] + fieldList[m + 1][n - 1];
}
else
{
spicalCount = fieldList[m][n + 1] + fieldList[m][n - 1] + fieldList[m + 1][n + 1] + fieldList[m + 1][n] + fieldList[m + 1][n - 1];
}
}
else if (m == fieldList.Length - 1)
{
if (n == 0)
{
spicalCount = fieldList[m][n + 1] + fieldList[m - 1][n] + fieldList[m - 1][n + 1];
}
else if (n == fieldList[m].Length - 1)
{
spicalCount = fieldList[m][n - 1] + fieldList[m - 1][n - 1] + fieldList[m - 1][n];
}
else
{
spicalCount = fieldList[m][n + 1] + fieldList[m][n - 1] + fieldList[m - 1][n + 1] + fieldList[m - 1][n] + fieldList[m - 1][n - 1];
}
}
else
{
if (n == 0)
{
spicalCount = fieldList[m - 1][n] + fieldList[m + 1][n] + fieldList[m + 1][n + 1] + fieldList[m - 1][n + 1] + fieldList[m][n + 1];
}
else if (n == fieldList[m].Length - 1)
{
spicalCount = fieldList[m][n - 1] + fieldList[m + 1][n] + fieldList[m + 1][n - 1] + fieldList[m - 1][n] + fieldList[m - 1][n - 1];
}
else
{
spicalCount = fieldList[m][n + 1] + fieldList[m][n - 1] + fieldList[m + 1][n + 1] + fieldList[m + 1][n] + fieldList[m + 1][n - 1] + fieldList[m - 1][n + 1] + fieldList[m - 1][n] + fieldList[m - 1][n - 1];
}
}
}
if (spicalCount >= A && spicalCount <= B)
{
r++;
}
}
}
}
}
return r;
}
}
}