C#算法解决萝卜地问题

开发 后端 算法
C#算法解决萝卜地问题想大家介绍了使用C#算法如何计算假想实际问题的思路,希望对大家理解学习C#算法有所帮助。

C#算法解决萝卜地问题是什么呢?首先让我们来看看题目:

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

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。

C#算法的具体实现如下:

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4.  
  5. namespace Field  
  6. {  
  7.     /// <summary>  
  8.     /// 2009.6.1 with ann by hooyes  
  9.     /// </summary>  
  10.    public class NumberField  
  11.     {  
  12.         static void Main(string[] args)  
  13.         {  
  14.  
  15.             //Test .  
  16.             string[] fieldx ={  
  17.    "1234567890",  
  18.     "1234567890",  
  19.     "1234567890",  
  20.    "1234567890",  
  21.       "1234567890",  
  22.    "1234567890",  
  23.    "1234567890",  
  24.    "1234567890",  
  25.    "1234567890",  
  26.    "1234567890",  
  27.    "1234567890"};  
  28.  
  29.             int r = countSpecialNumbers(fieldx, 3, 18);  
  30.  
  31.             Console.WriteLine(r);  
  32.             Console.Read();  
  33.         }  
  34.         /// <summary>  
  35.         /// 获取第i,j格的萝卜数  
  36.         /// </summary>  
  37.         /// <param name="i">行</param>  
  38.         /// <param name="j">列</param>  
  39.         /// <param name="fieldx"></param>  
  40.         /// <returns></returns>  
  41.         public static int fij(int i, int j,string[] fieldx)  
  42.         {  
  43.             int Rvalue = 0;  
  44.  
  45.             if (i < 0 || j < 0)  
  46.             {  
  47.                 return 0;  
  48.             }  
  49.  
  50.             int y = fieldx.Length - 1; //行  
  51.             int x = fieldx[0].Length - 1; //列  
  52.  
  53.             if ((i > y) || (j > x))  
  54.             {  
  55.                 return 0;  
  56.             }  
  57.             string f = fieldx[i];  
  58.             byte[] hooyesBy = System.Text.Encoding.ASCII.GetBytes(f);  
  59.             char xB = (char)hooyesBy[j];  
  60.             Rvalue = int.Parse(xB.ToString());  
  61.             return Rvalue;  
  62.         }  
  63.         /// <summary>  
  64.         /// 获取第i,j格的特殊度  
  65.         /// </summary>  
  66.         /// <param name="i">行</param>  
  67.         /// <param name="j">列</param>  
  68.         /// <param name="fieldx"></param>  
  69.         /// <returns></returns>  
  70.         public static int fsp(int i, int j, string[] fieldx)  
  71.         {  
  72.             int Rvalue = 0;  
  73.             Rvalue = fij(i - 1, j, fieldx) +   
  74.   fij(i + 1, j, fieldx) +   
  75.   fij(i, j - 1, fieldx) +   
  76.   fij(i, j+1, fieldx) +   
  77.   fij(i - 1, j - 1, fieldx) +   
  78.   fij(i + 1, j + 1, fieldx) +   
  79.   fij(i - 1, j + 1, fieldx) +   
  80.   fij(i + 1, j - 1, fieldx);  
  81.             return Rvalue;  
  82.         }  
  83.         /// <summary>  
  84.         /// 返回满足特殊度在A至B之间的格子数  
  85.         /// </summary>  
  86.         /// <param name="field"></param>  
  87.         /// <param name="A">特殊度下限</param>  
  88.         /// <param name="B">特殊度上限</param>  
  89.         /// <returns></returns>  
  90.         public static int countSpecialNumbers(string[] field, int A, int B)  
  91.         {  
  92.             int Rvalue = 0;  
  93.             //int i=0;  
  94.             //int j=0;  
  95.             int y = field.Length-1; //行  
  96.             int x = field[0].Length-1 ; //列  
  97.             for (int i = 0; i <=y; i++)  
  98.             {  
  99.                 for (int j = 0; j <=x;j++)  
  100.                 {  
  101.                     int tInt = fsp(i, j, field);  
  102.                     if (tInt >= A && tInt <= B)  
  103.                     {  
  104.                         Rvalue++;  
  105.                     }  
  106.  
  107.                 }  
  108.  
  109.             }  
  110.  
  111.             return Rvalue;  
  112.         }  
  113.     }  

C#算法C#算法解决萝卜地问题就向你介绍点到这里,希望对你理解C#算法有所帮助。

【编辑推荐】

  1. 介绍C#中的值类型
  2. C#算法巧解八皇后问题浅析
  3. C#算法解决张老师的生日问题
  4. C#算法解决的一道面试题
  5. C#算法实现字符串反转浅析
责任编辑:仲衡 来源: cnblogs
相关推荐

2009-08-11 09:40:22

张老师的生日问题C#算法

2009-08-06 10:35:27

C# lock thi

2021-06-11 00:09:20

C#爬虫版本

2009-08-10 13:49:50

C# txt文件

2009-08-13 17:25:18

C# Convert类

2009-08-11 09:16:00

2009-08-07 14:47:23

C#路径问题

2012-02-02 14:34:37

C# Socket

2009-08-11 10:12:07

C#算法

2009-09-15 17:46:08

C#绑定句柄无效

2009-08-11 13:54:54

约瑟夫环算法C#算法

2009-09-03 14:38:28

C#日期格式化C#日期格式

2009-08-06 16:01:30

C#接口成员

2009-08-28 10:14:45

C#内存泄露

2009-09-02 14:30:35

C#换行符号

2009-08-17 13:07:27

C#马赛克算法

2023-10-09 07:11:03

排序算法序列

2009-08-05 08:42:41

C#中用Oracle执DataSet

2011-04-25 15:15:00

C#

2022-08-11 11:09:38

线上问题程序员
点赞
收藏

51CTO技术栈公众号