2 / 2 / 1
Регистрация: 21.03.2015
Сообщений: 72
1

Рекурсивный распил доски, нужны комментарии к коду

27.05.2018, 10:12. Показов 390. Ответов 5
Метки нет (Все метки)

Здравствуйте! Искал задачу в интернете о рекурсивном распиле доски. Нашел следующий код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <stdio.h>
#include <sys/types.h>
#define K 202
#define INFTY INT_MAX
 
int k, n;
 
/* a[i][j] = цена распила отрезка [L[i], L[j]] */
int a[K][K];
 
/*    массив координат распилов, упорядоченый по возрастанию   */
int l[K];
 
/* Печатает  схему разреза отрезка [L[start], L[end]] 
   start и end — номера распилов 
  */
void print_brackets(int start, int end);
 
int main(int argc, char* argv[])
{
   int i, j, m, k, n;
   scanf("%d%d", &n, &k);
 
   l[0] = 0;                   /* координата левого конца палки */
   for(i = 1 ; i <= k ; i++)
      scanf("%d", &l[i]);      /* считываем координату i-го распила */
   l[++k] = n;                 /* координата правого конца палки */
   
   /* обнуляем главную (нулевую) и следующую(первую) диагональ*/
   for(i = 0 ; i <= k; i++)
      a[i][i] = a[i][i+1] = 0; 
 
   for(m = 2; m <= k ; m++)    /* m — номер диагонали  */
      for(i = 0 ; i + m <= k ; i++)
      {
         int L = l[i+m] - l[i];
         a[i][i+m] = INFTY; 
         for(j = 1 ; j < m; j++)
            if( a[i][i+m] > a[i][i+j] + a[i+j][i+m] )
               a[i][i+m] = a[i][i+j] + a[i+j][i+m];
         a[i][i + m] += L;
      }
   
   print_brackets (0, k);
   putc('\n', stdout);
   
   printf("%d\n", a[0][k]);
   system("pause");
   return 0;
}
 
 
void
print_brackets(int start, int end)
{
   int L = l[end] - l[start];
   int i, j, m;
   if(end - start <= 1)
   {
      for(i = start ; i < end; i++)
         printf("%d-", l[i]);
      printf("%d", l[end]);
   }
      
   else 
   for(j = 1 ; j  < end - start ; j++  )
      if(a[start][end] == a[start][start+j] + a[start+j][end] + L)
      {
         printf("( ");
         print_brackets(start, start+j ); 
         printf(", ");
         print_brackets(start+j, end ) ;
         printf(" )");
         break;
      }
}
Что это такое?
C
1
#define INFTY INT_MAX
При компиляции выходит ошибка в строке
C
1
  a[i][i+m] = INFTY;
Как это исправить или обойти?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.05.2018, 10:12
Ответы с готовыми решениями:

Нужны комментарии к коду
private void button1_Click(object sender, EventArgs e) { int n; ...

Нужны комментарии к коду
всем привет. вроде задачка простая, но я никак не могу объяснить правильный ответ xs = res...

Нужны комментарии к коду
Есть рабочий код, нужно помочь написать коментарии к коду, к основным функциям что за что отвечает...

Нужны комментарии к коду
#include &lt;vcl.h&gt; //загрузка стандартной библиотеки С++ Билдер #include &lt;math.h&gt; //Заголовочный...

5
1 / 1 / 1
Регистрация: 26.05.2018
Сообщений: 21
27.05.2018, 10:42 2
zzzLoLzzz, #difine это как бы определение;

Директива #define определяет идентификатор и последовательность символов, которой будет за*мещаться данный идентификатор при его обнаружении в тексте программы. Идентификатор так*же называется именем макроса, а процесс замещения называется подстановкой макроса. Стандар*тный вид директивы следующий:

#define имя_макроса последовательность_символов

Для Вашей задачи я бы лучше вместо этой строки записал бы вот так:
C
1
const int INFTY = INT_MAX;
0
2 / 2 / 1
Регистрация: 21.03.2015
Сообщений: 72
27.05.2018, 13:29  [ТС] 3
Нет, не прокатывает... Он тогда в результат выводит длину доски.
0
1 / 1 / 1
Регистрация: 26.05.2018
Сообщений: 21
27.05.2018, 19:47 4
zzzLoLzzz, Попробуй добавь вот эту строку в самое начало:
C
1
#include <iostream>
0
2 / 2 / 1
Регистрация: 21.03.2015
Сообщений: 72
28.05.2018, 05:52  [ТС] 5
На сколько мне известно, эта библиотека используется в С++, а данная программа написана на СИ. Это не поможет.
0
498 / 322 / 186
Регистрация: 30.04.2017
Сообщений: 622
28.05.2018, 09:23 6
zzzLoLzzz,
INT_MAX - это константа из заголовочного файла си <limits.h>
Подключи эту библиотеку в начале .с файла перед #define, чтобы использовать все константы из нее в своей программе
C
1
2
3
4
5
6
7
8
#include <stdio.h>
#include <sys/types.h>
#include <limits.h> /*для INT_MAX*/
#include <stdlib.h> /*для system(char *);*/
 
#define K 202
#define INFTY INT_MAX
...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.05.2018, 09:23

Нужны комментарии к коду
День добрый, кто шарит может написать комментарии к этому коду, пожалуйста! public class pr5...

Нужны комментарии к коду.
program otcht; type otch=record grupp:string; pred:string; kol:integer; pt:integer;...

Нужны комментарии к коду
pair&lt;bool, array&lt;int, 81&gt;&gt; SOL(const char* inp) { array&lt;int, 81&gt; ANS; int* TAB = ANS.data();...

Нужны комментарии к коду
меня интересуют вот эти три строки ,что они делают в данном коде.какой их тут смысл. C.pSet =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.