Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 02.11.2015
Сообщений: 57
1

Олимпиадная задача про библиотекаря

11.04.2016, 21:32. Показов 3153. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В общем, код есть, все работает. Надо сдать как лабу. Разрешили в вводном файле не указывать кол-во книг, а сразу в коде это указать. Объясните пожалуйста код.
PS. Условие задачи и файл ввода прикрепил

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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include<iostream> 
#include<Windows.h> 
#include<stdio.h> 
#include<string.h> 
#include<locale.h> 
#include<fstream>
using namespace std;
#define n 6 
 
 
 
int main(){ 
 
setlocale(LC_ALL, "RUS"); 
 
HANDLE hConsole; 
hConsole = GetStdHandle(STD_OUTPUT_HANDLE); 
 
 
int k; 
int A[n]; 
int B[n]; 
string Name[n];
ifstream in;
in.open("Books.txt");
for( int i=0;i<n;++i){
    in >> Name[i];
}
in.close();
//char *Name[n] = { "Преступление и наказание","Азбука","Белый клык","Яшка","Эмилия","Война и мир" }; 
 
//формируем массив A (придаем каждой книге свой номер)
for (int i = 0; i < n; i++) { 
k = 1; 
for (int j = 0; j < i; j++) { 
if (strcmp(Name[i].c_str(), Name[j].c_str())==1) 
k++; 
}//исключаем сравнение Name[i] книги с Name[i] 
for (int j = i + 1; j < n; j++) { 
if (strcmp(Name[i].c_str(), Name[j].c_str())==1) 
k++; 
} 
A[i] = k;
}//массив A сформирован 
 
//построим массив В по определенному алгоритму 
B[0] = 1; 
for (int j = 1; j < n; j++) { 
k = 0; 
for (int i = 0; i < j; i++) { 
if ((A[i] < A[j]) && (k < B[i])) //условия алгоритма 
k = B[i]; 
} 
B[j] = k + 1; 
} 
 
 
//найдем максимальный элимент массива В и его индекс 
int max = 1;//макс элемент 
int kmax;//его индекс 
for (int i = 0; i < n; i++) 
if (B[i] > max) { 
max = B[i]; 
kmax = i; 
} 
int p = n - max;//кол-во необходимых минимальных движений библиотекаря 
 
 
//найдем максимальную возрастающую подпоследовательность, запишем в массив С 
int C[n]; 
int h = kmax; 
C[max - 1] = A[kmax]; 
for (int i = kmax - 1; i >= 0; i--) 
if (B[h] - B[i] == 1) { 
C[B[i] - 1] = A[i]; 
h = i; 
} 
 
 
printf("исходный порядок книг(подсвеченное необходимо переставить):\n\n"); 
 
int ST; 
for (int i = 0; i < n; i++) { 
for (int j = 0; j < n; j++) { 
ST = 0; 
if (A[i] == C[j]) { 
SetConsoleTextAttribute(hConsole, 7); 
printf("%s\n", Name[i].c_str()); 
ST = 1; 
break; 
} 
} if (!ST) { 
SetConsoleTextAttribute(hConsole, 233); 
printf("%s\n", Name[i].c_str()); 
} 
} 
 
SetConsoleTextAttribute(hConsole, 7); 
printf("\n\nнеобходимое кол-во движений библиотекаря:");
printf(" %d\n\n\n", p); 
printf("правильный порядок книг:\n\n"); 
 
for (int i = 1; i <= n; i++) { 
for (int j = 0; j < n; j++) { 
if (A[j] == i) 
printf("%s\n", Name[j].c_str()); 
} 
} 
 
printf("\n\n"); 
 
 
system("pause"); 
}
Миниатюры
Олимпиадная задача про библиотекаря  
Вложения
Тип файла: txt Books.txt (321 байт, 38 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.04.2016, 21:32
Ответы с готовыми решениями:

Олимпиадная задачка про Роботов
Помогите решить не могу додуматься Роботы Кафедра ТМОИ создает роботов, которые могут находить и...

олимпиадная задачка про брак на заводе
Уважаемые программисты, вот еще одна задачка из серии олимпиадных. Может, она не такая сложная, но...

Олимпиадная задача
Недавно был на олимпиаде по программированию, там была задача, решение аналогов которой я не нашел....

Олимпиадная задача
Дошел до этой олимпиадной задачи и впал в ступор. Нагуглил, что можно решить с помощью матриц, либо...

0
11.04.2016, 21:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2016, 21:32
Помогаю со студенческими работами здесь

Олимпиадная задача
Алфавит мурмарианской системы счисления включает три цифры - 1, 2 и 3. Одна из популярных...

Олимпиадная задача
#include &lt;cstdio&gt; #include &lt;cstdlib&gt; #include &lt;iostream&gt; using namespace std; int main() {...

Задача на дп (олимпиадная)
Здравствуйте, имеется данная задача, основная проблема состоит в том, что мое решение никак не...

Олимпиадная задача
Есть такая задачка: В ряд выписаны числа, состоящие только из цифр 1, 3, 7: 1, 3, 7, 11, 13, 17,...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru