西狐网logo

萝卜地...分享;

今天参加的有道难题编程大赛看到的题目:

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

我的实现方法如下:

 

复制代码
using System;
using System.Collections.Generic;
using System.Text;

namespace Field
{
    
/// <summary>
    
/// 2009.6.1 with ann by hooyes
    
/// </summary>
   public class NumberField
    {
        
static void Main(string[] args)
        {

            
//Test .
            string[] fieldx ={
 
"1234567890",
 
"1234567890",
 
"1234567890",
 
"1234567890",
 
"1234567890",
 
"1234567890",
 
"1234567890",
 
"1234567890",
 
"1234567890",
 
"1234567890",
 
"1234567890"};

            
int r = countSpecialNumbers(fieldx, 318);

            Console.WriteLine(r);
            Console.Read();
        }
        
/// <summary>
        
/// 获取第i,j格的萝卜数
        
/// </summary>
        
/// <param name="i"></param>
        
/// <param name="j"></param>
        
/// <param name="fieldx"></param>
        
/// <returns></returns>
        public static int fij(int i, int j,string[] fieldx)
        {
            
int Rvalue = 0;

            
if (i < 0 || j < 0)
            {
                
return 0;
            }

            
int y = fieldx.Length - 1//
            int x = fieldx[0].Length - 1//

            
if ((i > y) || (j > x))
            {
                
return 0;
            }
            
string f = fieldx[i];
            
byte[] hooyesBy = System.Text.Encoding.ASCII.GetBytes(f);
            
char xB = (char)hooyesBy[j];
            Rvalue 
= int.Parse(xB.ToString());
            
return Rvalue;
        }
        
/// <summary>
        
/// 获取第i,j格的特殊度
        
/// </summary>
        
/// <param name="i"></param>
        
/// <param name="j"></param>
        
/// <param name="fieldx"></param>
        
/// <returns></returns>
        public static int fsp(int i, int j, string[] fieldx)
        {
            
int Rvalue = 0;
            Rvalue 
= fij(i - 1, j, fieldx) + fij(i + 1, j, fieldx) + fij(i, j - 1, fieldx) + fij(i, j+1, fieldx) + fij(i - 1, j - 1, fieldx) + fij(i + 1, j + 1, fieldx) + fij(i - 1, j + 1, fieldx) + fij(i + 1, j - 1, fieldx);
            
return Rvalue;
        }
        
/// <summary>
        
/// 返回满足特殊度在A至B之间的格子数
        
/// </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 Rvalue = 0;
            
//int i=0;
            
//int j=0;
            int y = field.Length-1//
            int x = field[0].Length-1 ; //
            for (int i = 0; i <=y; i++)
            {
                
for (int j = 0; j <=x;j++)
                {
                    
int tInt = fsp(i, j, field);
                    
if (tInt >= A && tInt <= B)
                    {
                        Rvalue
++;
                    }

                }

            }

            
return Rvalue;
        }
    }
}
复制代码

 

本文在我的独立博客同步发行:

https://hooyes.net/p/radish

附源代码:

/Files/hooyes/Radish_Field.rar

嘿;


 

 

posted on   西狐  阅读(1721)  评论(13编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述

导航

统计

点击右上角即可分享
微信分享提示