Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
ReckouNT
0 / 0 / 0
Регистрация: 13.04.2011
Сообщений: 11
#1

Задача по плюсам - C++

09.10.2011, 16:57. Просмотров 697. Ответов 11
Метки нет (Все метки)

Конечно понимаю что немного несправедливо с точки зрения рейтингов, но с задачкой провозился 2 часа, так и не разобрался... Возможно не стоило такую тяжелую брать
Еще можно упрекнуть, что не использовал функции, векора, и т.п. Это да, но я экономил на памяти и размере кода)
Ошибка не синтаксическая, но ответ программы не соответствует ответу на задачу.
Предположительно мог намудрить со знаками в циклах.
Спасибо заранее.

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
#include <fstream>
using namespace std;
 
int main()
{
/*
Задание # 337.
Условие: [url]http://********/index.asp?main=task&id_task=337[/url]
i - input
o - output
int n - количество лампочек
int k - количество инверсий
int pi[k-1] - массив из длин инверсий
int result - количество горящих лампочек
int lamps[n-1] - логический массив из лампочек (true - лампочка горит)
int u - количество произведенных инверсий в цикле
int w - для различных циклов
*/
//--------------------------------Input
ifstream i("INPUT.TXT", ios_base::in);
int n, k;
i >> n;
if (n < 1 || n > 1000000000)
 return 0;
i >> k;
if (k < 1 || k > 100)
 return 0;
i.seekg( 2 );
int pi[k-1];
for (int w = 0; w<k; w++)
{
 i >> pi[w];
 if ( pi[w] < 1 || pi[w] > 50 )
 return 0;
}
//-------------------------------/Input
int result = 0;
bool lamps[n-1];
for (int w = 0; w<k; w++)
{
 int u = 1;
 while (u*pi[w] < n)
 {
 //Если лампа текущей инверсии горит -> потушить ее, если не горит -> зажечь
 lamps[pi[w]*u]?lamps[pi[w]*u]=false:lamps[pi[w]*u]=true;
 ++u;
 }
}
 
//Считаем количество горящих лампочек:
for (int w = 0; w<n; w++)
{
 if (lamps[w] == true)
 ++result;
}
//--------------------------------Output
ofstream o("OUTPUT.TXT");
o << result;
//-------------------------------/Output
return 1;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2011, 16:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задача по плюсам (C++):

Задача: В некотором государстве ввели компьютерный паспорт гражданина.(задача) - Pascal
Доброго времени суток,форумчане. Хотелось бы попросить помощи в решении одной задачи от умных голов. Задача: В некотором...

Задача на k-тую цифру последовательности, задача на схему Горнера. - Pascal
Ну, собственно опять прошу помощи... Задача 1: Определить k-тую цифру последовательности 1234567891011121314…, в которой выписаны подряд...

Задача на перебор вариантов. Задача Л.Эйлера. Про чиновника - PascalABC.NET
Задача Л.Эйлера. Некий чиновник купил лошадей и быков на сумму 1770 талеров. За каждую лошадь он уплатил по 31 талеру, а за каждого быка по...

Первая смешанная задача для волнового уравнения на отрезке (задача о колебаниях ограниченной струны) методом Фурье - Дифференциальные уравнения
Решить первую смешанную задачу для волнового уравнения на отрезке (задача о колебаниях ограниченной струны) методом Фурье ...

Задача о размещении весов по ящикам (задача о рюкзаках) - Delphi
Есть упорядоченный по невозрастанию набор весов предметов w1..wn, которые необходимо распределить по ящикам способным выдержать вес V,...

Задача Дам или задача Восьми - Алгоритмы
помогите найти ошибку в алгоритме. не находит ответ подозреваю ошибку в k, i, j package com.company; import java.util.Arrays;...

11
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
09.10.2011, 17:07 #2
А вы уверены, что потянете задачу с самым высоким процентом сложности на ********? >_>
Там в обсуждении задачи есть ссылка на решение.
Но лучше начните с чего-нибудь попроще...)
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
09.10.2011, 17:13 #3
Первое, что бросается в глаза:
2)
C++
1
int pi[k-1];
Массив так не объявляют.
0
ReckouNT
0 / 0 / 0
Регистрация: 13.04.2011
Сообщений: 11
09.10.2011, 17:16  [ТС] #4
Цитата Сообщение от diagon Посмотреть сообщение
А вы уверены, что потянете задачу с самым высоким процентом сложности на ********? >_>
Там в обсуждении задачи есть ссылка на решение.
Но лучше начните с чего-нибудь попроще...)
Да знаю я, но в этом тоже охота разобратся, не охота ни бросать свои баги, ни тупо копипастить код из обсуждений)

Добавлено через 2 минуты
Цитата Сообщение от soon Посмотреть сообщение
Первое, что бросается в глаза:
1) Переполнение int n.
2)
Массив так не объявляют.
1. В условии задачи посмотрите на множество в которое n входит.
2. Вроде бы массив с таким объявлением более менее работает
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
09.10.2011, 17:19 #5
Касательно int я уже поправился. А массив так _не_ объявляют, честное слово. Читайте про new или malloc в Си.
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
09.10.2011, 17:22 #6
Цитата Сообщение от ReckouNT Посмотреть сообщение
Да знаю я, но в этом тоже охота разобратся, не охота ни бросать свои баги, ни тупо копипастить код из обсуждений)
А вы уверены, что у вас есть достаточная теоретическая база, чтобы вообще понять решение?
Цитата Сообщение от ReckouNT Посмотреть сообщение
2. Вроде бы массив с таким объявлением более менее работает
Работает только в gcc либо С99. По стандарту с++ такие объявления недопустимы.
0
ReckouNT
0 / 0 / 0
Регистрация: 13.04.2011
Сообщений: 11
09.10.2011, 17:28  [ТС] #7
Цитата Сообщение от diagon Посмотреть сообщение
А вы уверены, что у вас есть достаточная теоретическая база, чтобы вообще понять решение?

Работает только в gcc либо С99. По стандарту с++ такие объявления недопустимы.
В теоретической базе уверен. Здесь сложности только с логикой.
У меня g++
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
09.10.2011, 17:32 #8
Компилятор на acmp может это просто не переварить. Читайте про new, либо делайте статический массив. Потом только будете с логикой разбираться.
0
aeshes
441 / 204 / 13
Регистрация: 07.10.2011
Сообщений: 462
09.10.2011, 17:39 #9
Вы пишите, что съэкономили на размере памяти и скорости... Но при максимальном N=1 млрд, вас не смущает массив из миллиарда ячеек? А время его обработки?
Эта задача должна использовать другие структуры данных, не массивы. Либо они должны быть по другому реализованы
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
09.10.2011, 17:50 #10
Цитата Сообщение от aeshes Посмотреть сообщение
Вы пишите, что съэкономили на размере памяти и скорости... Но при максимальном N=1 млрд, вас не смущает массив из миллиарда ячеек? А время его обработки?
Эта задача должна использовать другие структуры данных, не массивы. Либо они должны быть по другому реализованы
Угу, эта задача нерешаема перебором из-за ограничений.

Цитата Сообщение от soon Посмотреть сообщение
Компилятор на acmp может это просто не переварить.
Да, там древняя версия VC.
0
ReckouNT
0 / 0 / 0
Регистрация: 13.04.2011
Сообщений: 11
09.10.2011, 17:52  [ТС] #11
Цитата Сообщение от aeshes Посмотреть сообщение
Вы пишите, что съэкономили на размере памяти и скорости... Но при максимальном N=1 млрд, вас не смущает массив из миллиарда ячеек? А время его обработки?
Эта задача должна использовать другие структуры данных, не массивы. Либо они должны быть по другому реализованы
Смущает, очень даже...
Пока ничего лучше в голову не приходит)
0
aeshes
441 / 204 / 13
Регистрация: 07.10.2011
Сообщений: 462
09.10.2011, 18:06 #12
Ну и еще, к слову, задачи на АСМР тренируют не навыки программирования на С++, а навыки алгоритмизации, построения оптимальных алгоритмов решения задач

так что ваша программа вполне возможно, написана верно с точки зрения синтаксиса С++, однако не будет принята сайтом из-за того, что не удовлетворяет ограничениям на память/скорость работы

Добавлено через 6 минут
Подумайте, нельзя ли как-то уменьшить размер рассматриваемого массива с 1 млрд элементов до более приемлемого числа
0
09.10.2011, 18:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2011, 18:06
Привет! Вот еще темы с ответами:

Задача на файл и задача на создание очереди - Pascal
1 Дан символьный файл, содержащий, по крайней мере, один символ пробела. Удалить из файла все символы, предшествующие пробелу 2 ...

Задача линейного программирования, транспортная задача - Методы оптимизации
Всем привет. сижу на экзамене, помогите пожалуйста решить,сроно!!! заранее спасибо.

задача Коши и краевая задача - Matlab
Помогите кто чем может))


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

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

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