Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
Rustam
12 / 12 / 3
Регистрация: 05.09.2009
Сообщений: 440
#1

Пять задач, включая задачу как обезвредить бомбу - C++

05.09.2009, 19:30. Просмотров 1938. Ответов 24
Метки нет (Все метки)

Задача N1

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


Задача N2

Человек вводит 10 чисел, замените 3 максимальным а 7 минимальным.
пример входных данных:
10,20,30,40,50,60,55,45,35,25;
пример выходных данных:
10,20,60,40,50,60,10,45,35,25;


Задача N3

"Осадки"
Вам даётсья задача зделать программу, которая работает с двумя текстовыми файламы (osadki.dat и osadki.rez) и делает при этом несколько вычислений. В 1. файл записаваетсья несколько строк. Первая строка содержит количество дней N, после которой следует количество строк (N). Начиная со второй строки в каждой записано два числа (отделены между собой пробелои) - температура воздуха и количество (в мм) осадков в день. Принимая во внимание, что
1) N <= 1000000
2) количество осадков не меньше 0 и не боль ше 100 мм
3) температура воздуха была между -50 и 50 градусами
4) если Температура меньше нуля падал снег,а во стольных случайах лил дождь
в файле osadki.rez надо вывести два числа отделённых между собой побелами - общая количество снега за все дни и общее количество дождя.
Пример
osadki.dat
3
-1 30
0 3
20 15

osadki.rez
30 18


Задача N4

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

Входные данные (файл METEOR.DAT):
В первой строке число T - количество секунд через которую метеориты
упадут на планету.
Во второй строке число N - количество телескопов.
В третьей строке находится 2*N чисел - координаты телескопов (x, в)
В четвертой строке число M - количество хранилищ.
В пятой строке находится 2*M чисел - координаты хранилищ (x, в)
В шестой строке число V - скорость транспортировки телескопов.

Примечание:
0<T<1000000 ; 0<N,M<100 ; -30000 <= x,y <=30000 ; 0<V<1000
T, N, M, x, в - цели.

Выходные даны: (файл METEOR.SOL):
В единственную строку файла записать максимальное количество телескопов,
которые могут быть спрятанные к началу падения метеоритов.
Пример METEOR.DAT:
10
4
1 7 3 7 5 7 100 100
2
2 7 4 7
0.1

Пример METEOR.SOL:
2


Задача N5

Взрывное устройство, которое было заложено неизвестным террористом, имеет N - лампочек, и M - переключателей.
Каждый переключатель изменяет состояние некоторых лампочек на противоположный. Для обезвреживания бомбы, необходимо выключить все лампочки.
Напишите программу, которая спасет мир.

Входные данные: (файл BOMBA.DAT):
В первой строке число N. (0<N<=100)
Во второй строке содержится N чисел, которые помечают состояние каждой лампочки (0 - выключенная, 1 - включенная).
В третьей строке содержится число M. (0<M<=100)
В каждом из следующих M строк содержится число K (количество лампочек состояние которых изменяет данный переключатель) и K чисел - номера соответствующих лампочек.
Выходные даны: (файл BOMBA.SOL):
Если бомбу обезвредить невозможно, запишите в исходный файл "NO" (без кавычек).
Если возможно спасти мир, то в первую строку запишите "YES" (без кавычек), а во вторую строку запишите номера переключателей которые необходимо задействовать.
Пример BOMBA.DAT:
5
0 1 1 0 1
4
3 2 3 4
3 1 4 5
2 4 5
2 2 4


P.S. Заранее большое спасибо, надеюсь, кто знает поможет мне!!!!!!!!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.09.2009, 19:30     Пять задач, включая задачу как обезвредить бомбу
Посмотрите здесь:
Отсортировать первые пять элементов массива по возрастанию, последние пять по убыванию C++
Ввести пять строк и из каждой строки вывести пять последних символа C++
C++ Пятью пять - двадцать пять
C++ Как вывести после запятой 3 символа включая нули
Подготовка к решению сложных задач и задач олимп.уровня C++
Как выполнить задачу с++ C++
C++ Как решить задачу?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rustam
12 / 12 / 3
Регистрация: 05.09.2009
Сообщений: 440
06.09.2009, 20:18  [ТС]     Пять задач, включая задачу как обезвредить бомбу #16
У меня есть задача, много думал но не смог сделать!!! Может кто-то сможет??? Заполнить квадратную матрицу последовательными целыми числами от 1 до N, расположенными по спирали, начиная с левого верхнего угла и продвигаясь по часовой стрелке, например:
Код
      1    2    3    4    5    6 
      20   21   22   23   24   7 
      19   32   33   34   25   8 
      18   31   36   35   26   9 
      17   30   29   28   27   10 
      16   15   14   13   12   11
Добавлено через 1 минуту
Простите ISergey я случайно два раза отправил!!! Извините уж!!! Я не хотел!!!
ISergey
Maniac
Эксперт С++
1373 / 884 / 52
Регистрация: 02.01.2009
Сообщений: 2,653
Записей в блоге: 1
06.09.2009, 20:19     Пять задач, включая задачу как обезвредить бомбу #17
Цитата Сообщение от Rustam Посмотреть сообщение
У меня есть задача, много думал но не смог сделать!!!!! Может кто-то сможет????? Заполнить квадратную матрицу последовательными целыми числами от 1 до N, расположенными по спирали, начиная с левого верхнего угла и продвигаясь по часовой стрелке, например:
Заполнение матрицы змейкой (по спирали)
Mozart
39 / 17 / 1
Регистрация: 21.08.2009
Сообщений: 63
07.09.2009, 16:09     Пять задач, включая задачу как обезвредить бомбу #18
4-я задачка с загогулиной, сразу в лоб не возьмешь, точнее возьмешь - но будут моменты когда ответы получатся не правильные, т.е. не довезет один или несколько телескопов
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
07.09.2009, 17:02     Пять задач, включая задачу как обезвредить бомбу #19
Ответ неправильный - значит неправильно решил

Основная пляска идет вокрут массива tel2stor[]
Значение -1 в этом массиве означает, что телескоп никуда не едет.
Значение от 0 до nstor-1 обозначает, что телескоп едет к хранилищу с этим номером.
Ну и разумеется два телескопа не могу ехать к одному хранилищу.
Для этого используется массив stor_used[].

Задача 4

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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
 
/************************************************/
#define MAX_TEL     100
#define MAX_STOR    100
 
 
/************************************************/
typedef struct {
    double x, y;
} coord_t;
 
 
/************************************************/
char in_name[]= "METEOR.DAT";
char out_name[]= "METEOR.SOL";
 
 
/************************************************/
int calc_moving( double tmet, int ntel, coord_t *ptel,
    int nstor, coord_t *pstor, double vspeed
);
 
 
/************************************************/
int main( void ) {
 
int i, j;
int ntel, nstor, nstor_tel;
double tmet, vspeed;
FILE *fin= NULL, *fout= NULL;
coord_t tel[MAX_TEL];
coord_t stor[MAX_STOR];
 
 
fin= fopen( in_name, "rt" );
if ( fin == NULL ) {
    fprintf( stderr, "Error opening file %s\n", in_name );
    exit( 1 );
}
fscanf( fin, "%lf", &tmet );
 
fscanf( fin, "%d", &ntel );
if ( ntel<0 || ntel>MAX_TEL ) {
    fprintf( stderr, "Invalid ntel=%d\n", ntel );
    exit( 1 );
}
for ( i= 0; i<ntel; i++ ) {
    fscanf( fin, "%lf %lf", &tel[i].x, &tel[i].y );
}
 
fscanf( fin, "%d", &nstor );
if ( nstor<0 || nstor>MAX_STOR ) {
    fprintf( stderr, "Invalid nstor=%d\n", nstor );
    exit( 1 );
}
for ( j= 0; j<nstor; j++ ) {
    fscanf( fin, "%lf %lf", &stor[j].x, &stor[j].y );
}
fscanf( fin, "%lf", &vspeed );
fclose( fin );
fin= NULL;
 
nstor_tel= calc_moving( tmet, ntel, tel, nstor, stor, vspeed );
 
fout= fopen( out_name, "wt" );
if ( fout == NULL ) {
    fprintf( stderr, "Error creating file %s\n", out_name );
    exit( 1 );
}
fprintf( fout, "%d\n", nstor_tel );
fclose( fout );
fout= NULL;
 
return 0;
 
} /* main() */
 
 
/************************************************/
int calc_moving( double tmet, int ntel, coord_t *ptel,
    int nstor, coord_t *pstor, double vspeed
) {
 
int i, j;
int itel;
double dx, dy;
int max_mov_tel, count_tel;
double max_mov_dist;
 
double dist_tel_stor[MAX_TEL][MAX_STOR];
int tel2stor[MAX_TEL];
int stor_used[MAX_STOR];
 
 
/* Check */
if ( tmet<0.0 || ntel<0 || nstor<0 || vspeed<0.0 ) {
    fprintf( stderr, "calc_moving(): Invalid arguments\n" );
    exit( 2 );
}
 
/* Calc max moving distance */
max_mov_dist= tmet*vspeed;
 
/* Calc distance */
for ( i= 0; i<ntel; i++ ) {
    for ( j= 0; j<nstor; j++ ) {
        dx= ptel[i].x-pstor[j].x; dy= ptel[i].y-pstor[j].y;
        dist_tel_stor[i][j]= sqrt( dx*dx+dy*dy );
    }
}
 
/* Init */
max_mov_tel= 0;
for ( j= 0; j<nstor; j++ ) { stor_used[j]= 0; }
itel= -1;
 
/* Next itel */
label_next_itel:
itel++;
if ( itel>=ntel ) { goto label_back; }
tel2stor[itel]= -1;
 
/* Check */
label_check:
if ( tel2stor[itel]>=0 ) {
    if ( stor_used[ tel2stor[itel] ] ) { goto label_next_stor; }
    stor_used[ tel2stor[itel] ]= 1;
}
 
/* Count telescope */
count_tel= 0;
for ( i= 0; i<=itel; i++ ) {
    if ( tel2stor[i]<0 ) { continue; }
    if ( dist_tel_stor[i][tel2stor[i]]<=max_mov_dist ) { count_tel++; }
}
if ( count_tel>max_mov_tel ) { max_mov_tel= count_tel; }
goto label_next_itel;
 
/* Free */
label_free:
if ( tel2stor[itel]>=0 ) {
    stor_used[ tel2stor[itel] ]= 0;
}
 
/* Next stor */
label_next_stor:
tel2stor[itel]++;
if ( tel2stor[itel]<nstor ) { goto label_check; }
 
/* Back */
label_back:
itel--;
if ( itel>=0 ) { goto label_free; }
 
/* Return */
return max_mov_tel;
 
} /* calc_moving() */
Mozart
39 / 17 / 1
Регистрация: 21.08.2009
Сообщений: 63
07.09.2009, 17:44     Пять задач, включая задачу как обезвредить бомбу #20
Угу, а каким образом решалась ситуация когда несколько телескопов претендуют на одно хранилище, при этом у некоторых из них есть доступ к другим (как определяется выбор что бы не заблокировать другие телескопы, при этом спрятать как можно больше)?
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
07.09.2009, 18:21     Пять задач, включая задачу как обезвредить бомбу #21
Никак не разрешается - просто перебираются все варианты и все
Значение tel2stor[i] содержит номер хранилища куда поедет i-тый телескоп.
При этом еще есть специальное значение - -1, которое обозначает что i-тый телескоп никуда не поедет.
Но и это еще не все - значение itel обозначает номер последнего установленного телескопа.
То есть массив tel2stor[] всегда рассматривается от 0 до itel включительно.
А дальше просто перебираем все варианты и не допускаем чтобы телескоп с большим номером не занял хранилище, если оно занято телескопом с меньшим номером.

Добавлено через 7 минут
При таком переборе конечно есть дубликаты вариантов.
Можно наверное проверять счетчик доставленных телескопов непосредственно перед ходом назад (back), потому что в этот момент достигнуто наибольшее значение itel для данной цепочки.
Но я проверяю счетчик каждый раз.
Можно еще ускорить проверку счетчика заведением дополнительного массива.
Ведь для данной цепочки значение счетчика при itel и при itel-1 может либо совпадать (когда телескоп c номером itel не смог доехать) или быть больше на 1 (когда телескоп доехал).
То есть для вычисления значения счетчика достаточно сделать всего 1 проверку вместо (itel+1) проверки.
Mozart
39 / 17 / 1
Регистрация: 21.08.2009
Сообщений: 63
07.09.2009, 18:31     Пять задач, включая задачу как обезвредить бомбу #22
Т.е., я так понял, просто перебираются все варианты, и возвращается максимальное количество телескопов которых удалось припрятать в момент прохода перебора?
ЗЫ: а я пытался решить этот вопрос без полного перебора, чуть голову не сломал, но таки допер как его делать, вот только еще не закодил.
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
07.09.2009, 18:38     Пять задач, включая задачу как обезвредить бомбу #23
Да - полный перебор, но не совсем - например два телескопа в одно хранилище не едут.
Я думаю все равно все сведется к почти полному перебору.
Можно например поставить телескопы в одну точку и все хранилища в другую точку.
После чего тебе остается только перебирать кто куда поедет.

Во - мой вариант перебора можно еще сократить.
Если мы заняли все хранилища, то дальше расставлять телескопы нет смысла - нужно делать шаг в сторону - label_free.
Mozart
39 / 17 / 1
Регистрация: 21.08.2009
Сообщений: 63
07.09.2009, 18:48     Пять задач, включая задачу как обезвредить бомбу #24
sqrt( dx*dx+dy+dy ); очепятка я так понимаю.
Да таки получится почти полный перебор. В любом случае придется рассматривать каждое возможное положение телескопа, учитывая занятые позиции. Только я это хотел сделать через задницу Х_х
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2009, 19:44     Пять задач, включая задачу как обезвредить бомбу
Еще ссылки по теме:
как написать задачу в си C++
C++ Как дорешать задачу?
C++ Как выполнить данную задачу на с++ ?
как cделать простую задачу на С++ C++
C++ Как перевести из Pascal в C++ задачу?

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

Или воспользуйтесь поиском по форуму:
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
07.09.2009, 19:44     Пять задач, включая задачу как обезвредить бомбу #25
Я понял, что задача симметрична.
Можно с таким же успехом расставлять хранилища в телескопы

Добавлено через 1 минуту
очепятка я так понимаю.
Угу - сосредоточился на переборе и не заметил
Кстати для теста ответ совпал
Yandex
Объявления
07.09.2009, 19:44     Пять задач, включая задачу как обезвредить бомбу
Ответ Создать тему
Опции темы

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