Чтение в массивы в C ++ - PullRequest
       15

Чтение в массивы в C ++

0 голосов
/ 08 февраля 2009

Я готовлюсь к соревнованию (отсюда мой предыдущий вопрос ). Я разобрался с алгоритмом для вопроса, но у меня возникли некоторые проблемы с самим программированием. Это сольный конкурс, поэтому мне нужно разобраться в этом, прежде чем я пойду на это. Это вопрос.

ЗАДАЧА 3: GECKO В сезон дождей, одна из стен в доме заражены комарами. Стена покрыты квадратными плитками h × w, где есть h рядов плиток сверху дно, а ш столбцы плиток из слева направо. Каждая плитка имеет от 1 до 1000 комары отдыхают на нем. Геккон хочет съесть столько комаров, сколько возможно при условии следующего ограничения. Начинается с выбора любая плитка в верхнем ряду, и ест комары в этой плитке. Затем это переходит на плитку в следующем нижнем ряду, ест комаров на плитке, и так до тех пор, пока он не достигнет пола. когда он перемещается из одной плитки в плитку в следующий нижний ряд, он может только двигаться вертикально вниз или по диагонали к влево или вправо (см. рисунок 1). Дано значения h и w, а также числа комаров, лежащих на каждой плитке, написать программу для расчета максимума возможное количество комаров Геккон может съесть за одну поездку сверху до нижней части стены.

Пример входного файла:
Пример

6 5
3 1 7 4 2
2 1 3 1 1
1 2 1 1 8
2 2 1 5 3
2 1 4 4 4
5 7 2 5 1

Проблема, с которой я столкнулся, заключается в чтении чисел (или в верхней части списка проблем). Мой текущий код для чтения в:

ifstream read;
read.open("input.txt");
write.open("output.txt");
int width, height, wall[500][500];
read >> height;
read >> width;
for ( int count1 = 0; count1 < height; count1++)
{
   for ( int count2 = 0; count2 < width; count2++)
      { 
         read >> wall[count1][count2];
       }
}

Когда я проверил это с cout, чтобы напечатать все прочитанные числа, все, что я получил, было бредом. Прямо сейчас я не могу обнаружить ошибки с этим, кто-нибудь может увидеть проблему? Благодарю. (исправлено) Еще раз спасибо.

Я проверил прочитанное, и теперь оно идеально. Тем не менее, количество мух, которые я получаю, все еще не определено. Например, ввод
1 1
23
Должен дать вывод 23, но я получаю 0 в качестве вывода. Вот мой код:

int h = 0, w = 0, compare1, compare2, compare3, currentInt;
for ( int count3=( height-2 ); count3 >= 0; count3--)
{  
   for( int count4 = 0; count4 < width; count4++)
     {
     h = count3;
     w = count4;
      currentInt = wall[h][w];   // read in affected integers.
      if( w != 0 )
       { compare1 = wall[h+1][w-1];
       }
       compare2 = wall[h+1][w];
       compare3 = wall[h+1][w+1]; 
       if( w!= 0)                     // Compare and replace. 
       {  
          if((( currentInt + compare1) >=(currentInt + compare2)) && ((currentInt + compare1)>=(currentInt + compare3)))
          { 
             wall[h][w] = ( currentInt+compare1);
          }
          if((( currentInt + compare2) >(currentInt + compare1)) && ((currentInt + compare2)>(currentInt + compare3)))
          { 
             wall[h][w] = ( currentInt+compare2);
          }
          if((( currentInt + compare3) >=(currentInt + compare2)) && ((currentInt + compare1)>(currentInt + compare1)))
          { 
             wall[h][w] = ( currentInt + compare3);
          }
       }
       else
       { 
          if ((currentInt + compare2) >= ( currentInt + compare3))
          {
             wall[h][w] = ( currentInt + compare2);
          }
          else
          {
             wall[h][w] = ( currentInt + compare3);
          }
       }
      }
}
int maxFlies=0;
for (int count5 = 1; count5 < width;count5++)
   {
   maxFlies = wall[0][0] ;
   if ( maxFlies < wall[0][count5])
   { maxFlies = wall[0][count5] ; }
   }
write<<maxFlies<<endl;
read.close();
write.close();
return 0;

То, что я пытаюсь сделать с этим, в основном: Читайте со второй последней строки. Добавьте это с единственными блоками, которых это может достигнуть ниже. Затем переместитесь вверх и, наконец, проверьте, какая из верхних строк является наибольшим целым числом. Спасибо за быстрые ответы.

Ответы [ 2 ]

1 голос
/ 08 февраля 2009

2D массивы не доступны как массив [альфа, бета] в C ++.

Это делается как массив [альфа] [бета].

0 голосов
/ 23 марта 2009

Ваш цикл начинается с

for ( int count3=( height-2 ); count3 >= 0; count3--)
{  
    ....
}

Если ваши входные данные представляют собой массив 1x1, то (height-2) == -1, поэтому цикл никогда не будет выполнен (поскольку условие (count3> = 0) никогда не будет истинным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...