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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 48, средняя оценка - 4.77
Bohes_
4 / 4 / 0
Регистрация: 18.06.2013
Сообщений: 51
#1

Выведите в выходной файл округленное до n знаков после десятичной точки число E - C++

05.08.2013, 11:17. Просмотров 6197. Ответов 53
Метки нет (Все метки)

Как пишутся очень короткие программы на C++ или C (менее 150 символов, не считая пробелов и табуляций)?
Например, задача
Выведите в выходной файл округленное до n знаков после десятичной точки число E. Число Е, округленное до 25 знаков после десятичной точки, равно 2.7182818284590452353602875.

Входные данные

Входной файл INPUT.TXT содержит целое число n (0 ≤ n ≤ 25).

Выходные данные

В выходной файл OUTPUT.TXT выведите ответ на задачу.
Вот мое решение на 255 символов:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <fstream>,<string>
 
int main()
{
    std::string e = "2.71828182845904523536028750";
    std::ifstream f ("input.txt");
    std::ofstream o("output.txt");
    int a,i;
    
    f >> a;
    if (a==0) 
            o << 3;
         else
        {
            if (e[a+2] > 52) e[a+1]++;
            for (i=0; i <= a+1 ;++i)
                o<<e[i];
        }   
    
    return 0;
}
Некоторым удается написать решения на 130, 156, 171 символов. Как это у них получается?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.08.2013, 11:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выведите в выходной файл округленное до n знаков после десятичной точки число E (C++):

Вывести в выходной файл округленное до n знаков после десятичной точки число E - C++
Выведите в выходной файл округленное до n знаков после десятичной точки число E. Число Е, округленное до 25 знаков после десятичной точки,...

Округлить число до 25 знаков после десятичной точки - C++
Есть простая задача: вот я ее решаю таким способом, т.к в задании написано округлить #include &lt;fstream&gt; #include &lt;string&gt;...

Вывести в файл число с заданным количеством знаков после точки - C++
Как это сделать, нигде не нашёл.(

Округление числа до n знаков после десятичной точки - C++
Решил задачу для новичков по C++. Задача совсем для зелёных новичков, кто только-только начал изучать C++, и у меня есть ощущение, что её...

Выведите первую цифру числа после десятичной точки - C++
Дано положительное действительное число X. Выведите его первую цифру после десятичной точки. Пример Входные данные: 14.85 ...

Вычислить функцию с точностью 6 знаков после десятичной точки - C++
)Вычислить функцию f(x,a)= при x=0.4, 0.6,..., 1.2 и a=2, 3, 4, 5 с точностью 6 знаков после десятичной точки.

53
Bohes_
4 / 4 / 0
Регистрация: 18.06.2013
Сообщений: 51
05.08.2013, 15:08  [ТС] #16
А как решить такую задачу за 111 символов?
Драконы
(Время: 1 сек. Память: 16 Мб Сложность: 40%)
Известно, что у дракона может быть несколько голов и его сила определяется числом голов. Но как определить силу драконьей стаи, в которой несколько драконов и у каждого из них определенное число голов? Вероятно, вы считаете, что это значение вычисляется как сумма всех голов? Это далеко не так, иначе было бы слишком просто вычислить силу драконьей стаи. Оказывается, что искомое значение равно произведению значений числа голов каждого из драконов. Например, если в стае 3 дракона, у которых 3, 4 и 5 голов соответственно, то сила равна 3*4*5 = 60. Предположим, что нам известно суммарное значение голов драконьей стаи, как нам вычислить максимально возможное значение силы этого логова драконов? Именно эту задачу Вам и предстоит решить.

Входные данные

В единственной строке входного файла INPUT.TXT записано натуральное число N (0 < N < 100) – количество голов драконьей стаи.

Выходные данные

В единственную строку выходного файла OUTPUT.TXT нужно вывести максимально возможное значение силы, которая может быть у стаи драконов из N голов.
Через ДП или тут есть какая-то формула?
http://********/?main=task&id_task=42

Добавлено через 1 час 7 минут
У меня через ДП выходит 205 символов:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <fstream>
 
int main()
{
    std::fstream f("input.txt"), o("output.txt",2);
    long long x,i,j, a[100];
    a[1] =1;
    f>>x;
    for (i = 2; i<=x;++i)
    {
        a[i]=i;
        for (j = i-1; j >= i/2; --j)
            a[i]=std:: max(a[i],a[j]*a[i-j]);
    }
    o<<a[x];
    
 
}
0
nonedark2008
914 / 653 / 137
Регистрация: 28.07.2012
Сообщений: 1,767
05.08.2013, 15:28 #17
По первой... Возможно нигде не ошибся...
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <fstream>
 
int main() {
    char e[] = "2.71828182845904523536028750";
    std::fstream f ("input.txt"), o("output.txt", 2);
    int a, b;
    f >> a;
    b = a ? a + 1: a;
 
    e[b] += (30043989 >> a) & 1, e[b + 1] = 0;
    o << e;
}
176 символов. Дальше не знаю как жать >_>
0
Somebody
2789 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 1
05.08.2013, 15:30 #18
154, хотя, вроде бы знаю, как короче. Сейчас ещё попробую...
C++
1
2
3
4
5
6
7
8
9
10
11
#include <fstream>
 
main(int p)
{
    std::fstream i("input.txt"), o("output.txt", 2);
    i >> p;
    char s[] = "2.7182818284590452353602875", *q = s + p + !!p;
    *q += s[p + 2] > 52;
    q[1] = 0;
    o << s;
}
2
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
05.08.2013, 15:33 #19
С учетом предыдущих ошибок я в 162 укладываюсь, но это как-то много, если кто-то и вправду 130 символами обошелся.
0
nonedark2008
914 / 653 / 137
Регистрация: 28.07.2012
Сообщений: 1,767
05.08.2013, 15:35 #20
Somebody, неверно. Фейлится на девятке. Или я не по тем правилам округляю?
0
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
05.08.2013, 15:38 #21
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Фейлится на девятке.
В данном конкретном случае не фейлится, после единственной 9-ки идет 0.
0
Bohes_
4 / 4 / 0
Регистрация: 18.06.2013
Сообщений: 51
05.08.2013, 15:42  [ТС] #22
Цитата Сообщение от Somebody Посмотреть сообщение
154, хотя, вроде бы знаю, как короче. Сейчас ещё попробую...
C++
1
2
3
4
5
6
7
8
9
10
11
#include <fstream>
 
main(int p)
{
    std::fstream i("input.txt"), o("output.txt", 2);
    i >> p;
    char s[] = "2.7182818284590452353602875", *q = s + p + !!p;
    *q += s[p + 2] > 52;
    q[1] = 0;
    o << s;
}
В тестирующей системе проходит на ура

Добавлено через 2 минуты
Somebody, объясните, пожайлуста, что значат

C++ (Qt)
1
2
char *q = s + p + !!p;
    *q += s[p + 2] > 52;
у вас в коде?
0
Somebody
2789 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 1
05.08.2013, 16:08 #23
q - указатель на последнюю цифру (которую надо изменить). !p - логическое отрицание - ноль становится единицей, остальное нулём. Двойное отрицание - получается, всё, что не равно нулю, становится единицей. В общем
C++
1
char* q = &s[p + (p > 0)];
*q надо увеличить на единицу, если следующая цифра больше четвёрки. s[p + 2] - следующая цифра (q[1] нельзя, потому что при p = 0 попадёт на точку, а точка меньше четвёрки по коду). 52 - это '4'.
2
Bohes_
4 / 4 / 0
Регистрация: 18.06.2013
Сообщений: 51
06.08.2013, 16:29  [ТС] #24
Помогите найти решение этой задачи за 132 или меньше символов:
Дом - Школа - Дом
(Время: 1 сек. Память: 16 Мб Сложность: 21%)
Мальчик Вася каждый день ездит на метро. Утром он едет в школу, а вечером того же дня, обратно из школы, домой. Для того, чтобы немного сэкономить, он покупает электронную смарт-карту на X поездок. Когда он хочет зайти в метро, он прикладывает карту к турникету. Если на карте осталось ненулевое количество поездок, то турникет пропускает Васю и списывает с карты одну поездку. Если же на карте не осталось поездок, то турникет не пропускает Васю, и он (Вася) вынужден купить на этой же станции новую карту на X поездок и вновь пройти через турникет.

Вася заметил, что в связи с тем, что утром метро переполнено, покупать новую карту утром накладно по времени, и он может опоздать в школу. В связи с этим он хочет понять: будет ли такой день, что с утра, поехав в школу, окажется, что у него на карточке ноль поездок.

Вася больше никуда на метро не ездит и поэтому заходит в метро только на станции около дома и на станции около школы.

Входные данные

Во входном файле INPUT.TXT содержится ровно 2 строки. В первой содержится слово «School» или «Home» в зависимости от того, где первый раз Вася купил карточку на X поездок. Во второй строке содержится натуральное число X, 1 ≤ X ≤ 1000.

Выходные данные

В выходной файл OUTPUT.TXT следует вывести «Yes», если будет такой день, что утром у Васи на карточке окажется ноль поездок и «No» в противном случае.
Используя все мои знания о C++, я нашел решение только на 137 символов:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
#include <fstream>
 
int main()
{
    int x;
    char s[2];
    std::fstream f("input.txt"), o ("output.txt",2);
    f>>s>>x;
    o<<(((*s!=72) && !(x%2))?"No":"Yes");       
}
0
nonedark2008
914 / 653 / 137
Регистрация: 28.07.2012
Сообщений: 1,767
06.08.2013, 16:49 #25
Bohes_, как уже делалось в прошломпримере:
C++
1
main( int x )
char s[7]; -у тебя слишком маленький массив был.
o << *s!=72 && !(x%2)?"No":"Yes"; // Куча ненужных скобок.
1
Bohes_
4 / 4 / 0
Регистрация: 18.06.2013
Сообщений: 51
06.08.2013, 17:00  [ТС] #26
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Bohes_, как уже делалось в прошломпримере:
C++
1
main( int x )
char s[7]; -у тебя слишком маленький массив был.
o << *s!=72 && !(x%2)?"No":"Yes"; // Куча ненужных скобок.
При main( int x ) в проверяющей системе пишется Time limit exceeded
Скобочки очень даже нужные :
task.cpp(9) : error C2679: binary '!=' : no operator found which takes a right-hand operand of type
'int' (or there is no acceptable conversion)
p.s. С размером массива у меня все в порядке

Добавлено через 6 минут
Вот таким образом:
C++ (Qt)
1
o << (*s!=72 && !(x%2)?"No":"Yes");
удалось добиться 135 символов
0
nonedark2008
914 / 653 / 137
Регистрация: 28.07.2012
Сообщений: 1,767
06.08.2013, 17:03 #27
Цитата Сообщение от Bohes_ Посмотреть сообщение
*s!=72
Попробуй *s - 72
1
Bohes_
4 / 4 / 0
Регистрация: 18.06.2013
Сообщений: 51
06.08.2013, 17:07  [ТС] #28
nonedark2008, спасибо, работает и 132 символа. Только не понятно, как можно записать решение на С++ за 114 символов
0
nonedark2008
914 / 653 / 137
Регистрация: 28.07.2012
Сообщений: 1,767
06.08.2013, 17:16 #29
o << *s-72 && !(x%2)?"No":"Yes";
Без скобок тоже проходит
0
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
06.08.2013, 17:19 #30
C++
1
2
3
4
5
6
7
8
9
10
#include <fstream>
 
main(int n)
{
    char s[9];
    std::fstream i("input.txt"), o("output.txt", 2);
    i >> s >> n;
 
    o << (!s[4] + n % 2 ? "Yes" : "No");
}
117
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.08.2013, 17:19
Привет! Вот еще темы с ответами:

Дано вещественное число, проверить является ли это число симметричным относительно положения точки до двух знаков после запятой. - C++
Только начинаю программировать на с/с++ и столкнулась с логическими выражениями, простейшие задачи могу решить а в эту никак не могу...

Задача на струтуру. В выходной файл выведите время, оставшееся от t1 до t2 в формате hh:mm:ss - C++
Дано время t1 и время t2. Гарантируется, что t1 и t2 -время одного дня, а также что t1&lt;t2. Определить, сколько времени пройдет от t1 до t2....

Округление знаков, после точки - C++
Столкнулся с проблемой при работе с float float x1 = 1.0000000000000000; float x2 = x1 + 0.111111111111; float x3 = x2 +...

Количество знаков до и после точки - C++
К примеру, есть число 123.0087 и мне нужно, чтобы вывело в textBox1 число 3 - количество знаков до точки; и в textBox2 число 4 - количество...


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

Или воспользуйтесь поиском по форуму:
30
Yandex
Объявления
06.08.2013, 17:19
Ответ Создать тему
Опции темы

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