Нужно посчитать количество кораблей. Корабли представлены как игра «линкор».

«1» представляет корабль, «0» - воду. C #

namespace Ships
 {
 class Program
  {
  static int[,] ships = new int[10, 10] {
      { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, },
      { 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, },
      { 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, },
      { 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, },
      { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, },
      { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
      { 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, },
      { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
      { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, },
      { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, }
  };

  static void Main(string[] args)
  {
     int count = 0;

     // code write here
    
     Console.WriteLine(count);

     Console.ReadLine();
  }
 }
}
-2
Anastasia 11 Окт 2021 в 17:09

3 ответа

Лучший ответ

На основании переписанного вопроса и пояснения в вашем комментарии ..

int count = ships.Cast<int>().Count(x => x == 1);  

Это будет подсчитывать количество единиц в вашем 2D-массиве (например, 20 в вашем примере). Sum() было бы немного проще, но я думаю, что Count в этом случае немного более самодокументируется, и его проще изменить, если вы решите использовать значение, отличное от 1.

Для подхода, отличного от LINQ, вы должны сделать что-то вроде:

int count = 0;
for (int i = 0; i < ships.GetLength(0); i++)
{
    for (int j = 0; j < ships.GetLength(1); j++)
    {
        if (ships[i, j] == 1)
            count++;

        //Could also just do:
        //count += ships[i, j];
        //Since you're only working with 1 and 0
    }
}
3
Broots Waymb 11 Окт 2021 в 15:00

Невозможно: представьте, что у вас есть это:

1 1 1
1 1 1

Эти двое имеют длину 3 или трое длины 2?

Вам нужно прояснить вашу проблему.

0
Dominique 11 Окт 2021 в 14:12

С учетом нового вопроса вам должно быть достаточно:

int count = ships.Cast<int>().Sum();

с помощью простого поиска в Интернете вы бы легко нашли это, хотя

0
JS Garcia 11 Окт 2021 в 15:01