算法详解

摘要

昨天,由于比赛严禁在5月31日当天通过任何渠道传播、讨论题目、解答方法和程序。网易“有道难题”打电话,特别声明,让我暂时删掉关于这两道算法的随笔,哈哈,吓我一跳,我差点泄题,不过遵循她意见后,将昨天的帖子删掉,改到今天拿出来一起切磋一下。程序竞赛之所以吸引众多编程爱好者,是因为可以再互相学习、切磋提高。:)

第一道算法题(250分)

      话说你在走路上班时,经过一片种植萝卜的农田。这块田地的形状是一个矩形的网格。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

以下是我实现的用一个方法搞定的代码:

C#代码实现一
C#代码实现二

      
 
Constraints
-  n取值范围为1到1,000,000,000(含)
Examples
0)  
      1

Returns: 0


1)  
      1729

Returns: 1
1729=1^3+12^3
1729=9^3+10^3


2)  
      475574

Returns: 27

C#代码实现

你可能感兴趣的:(算法详解)