Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2011, 15:55   #1
Анастасия18
Пользователь
 
Регистрация: 13.02.2011
Сообщений: 16
По умолчанию Граница между двумя государствами

Добрый день! Помогите пожалуйста разобраться с задачей! Мне почему выдает отрицательный ответ!

Формат входных данных:
Первая строка содержит два целых числа: w и h — размеры прямоугольника в километрах (1 ≤ w, h ≤ 100). Далее следуют h строк, описывающих территорию. Каждая из них содержит w символов. Если символ равен A, то соответствующий единичный квадрат принадлежит первому государству, а если он равен B, то второму. Гарантируется, что каждому государству принадлежит хотя бы один квадрат.

Пример входного файла:
5 6
AAABB
ABBBB
AAABB
AAAAB
AAAAB
AABBB

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

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
FILE *f, *g;
int w, h, d, i, j;
char x;
char **mas;
d=0;
if ((f=fopen("f.txt", "r"))==NULL)
{ printf ("Error"); }
if ((g=fopen("g.txt", "w+"))==NULL)
{ printf ("Error"); }
fscanf (f, "%d ", &x);
h=x; //Количетво столбцов//
fscanf (f, "%d ", &x);
w=x; //Количесвто строк//
int *k=new int[h*w];
mas=new char*[w];
while (!feof(f))
{
for (i=0; i<w; i++)
{
mas[i]=new char[h];
for (j=0; j<h; j++)
{
fscanf (f, "%c", &x);
mas[i][j]=x;
}
}
}
fclose(f);
for (i=0; i<w; i++)
{
for (j=0; j<h; j++)
{
if (mas[i][j]==mas[i][j+1]) { k[i]++; }
}
}
for (i=0; i<w; i++)
{
d=d+abs(k[i]-k[i+1]);
}
d=d+w;
fprintf (g, "%d", d);
for (i=0; i<w; i++)
{ delete mas[i]; }
delete []mas;
delete []k;
}

Последний раз редактировалось Анастасия18; 15.09.2011 в 15:58.
Анастасия18 вне форума Ответить с цитированием
Старый 15.09.2011, 16:03   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

А что требуется найти в задаче? Площадь государства B?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 15.09.2011, 16:47   #3
Анастасия18
Пользователь
 
Регистрация: 13.02.2011
Сообщений: 16
По умолчанию

Нет! Длину границы между А и В!
Анастасия18 вне форума Ответить с цитированием
Старый 15.09.2011, 19:07   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Ну если поперли геометрию то сумма расстояний между двумя точками.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 15.09.2011, 19:28   #5
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>
//d #include <math.h>

int main() {
 
   FILE *f, *g;
   int w, h, d, i, j;
   char x;
   char **mas;
 
   d = 0 ;
   if ((f=fopen("f.txt", "r"))==NULL) { 
      printf ("Error") ;
      return -1 ; 
   }
   if ((g=fopen("g.txt", "w+"))==NULL) { 
      printf ("Error") ;
      return -1 ; 
   }

   fscanf (f, "%d ", &x);
   w = x ; // Количество СТОЛБЦОВ
   fscanf (f, "%d ", &x);
   h = x ; // Количество СТРОК
   int* k = new int[h] ;
   mas = new char*[h] ;
//d   while (!feof(f)) {
   for ( i=0; i<h; i++ ) {
      mas[i] = new char[w] ;
      for (j=0; j<w; j++) {
         fscanf (f, "%1s", &x);
         mas[i][j] = x;
      }
   }
//d   }
   fclose(f);

   // Ввела? - РАСПЕЧАТАЙ!
   for ( i=0; i<h; i++ ) {
      for (j=0; j<w; j++) {
         printf( "%c", mas[i][j] ) ;
      }
      printf( "%c", '\n' ) ;
   }
   
   for (i=0; i<h; i++) {
      k[i] = 0 ;
      for (j=0; j<w-1; j++) {
         k[i]++ ;
         if (mas[i][j] != mas[i][j+1]) 
            break ;
      }
   }
   for (i=0; i<h-1; i++) {
      d = d+abs(k[i]-k[i+1]) ;
   }
   d = d+h ;
 
   fprintf( g, "%d", d ) ;
 
   for (i=0; i<h; i++) { delete mas[i]; }
 
   delete []mas;
   delete []k;
 
   return 0 ;

}
w - это, очевидно, width, а h - height ?.. У Вас их смысл во входном файле и в программе - противоположный, с этого всё начинается. Плюс, ещё несколько более или менее мелких огрехов в алгоритме и в технике программирования. Ну и смешивать в одной программе чисто C-шные ф-ии ввода-вывода и "плюсовые" new() / delete() - как-то не якши...
Vago вне форума Ответить с цитированием
Старый 15.09.2011, 22:06   #6
Анастасия18
Пользователь
 
Регистрация: 13.02.2011
Сообщений: 16
По умолчанию

Большое спасибо! Я учусь на первом курсе и многого не знаю! Со временем научусь!
Анастасия18 вне форума Ответить с цитированием
Старый 15.09.2011, 22:32   #7
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от Анастасия18 Посмотреть сообщение
... Со временем научусь!
Кстати, не сомневаюсь Удачи!
Vago вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связь между двумя DBGrid WALL БД в Delphi 3 05.11.2010 15:47
время между двумя интервалами tbeca@mail.ru Общие вопросы Delphi 2 29.01.2010 23:11
Разница между двумя datetimepicker Droid Общие вопросы Delphi 3 24.09.2009 23:20
Связь между двумя ОС Яр|/||< (^_^) Общие вопросы Delphi 8 06.07.2009 20:45
выборка между двумя датами UnChanter БД в Delphi 1 30.03.2009 21:09