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

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

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

Author24 — интернет-сервис помощи студентам
Как пишутся очень короткие программы на 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.08.2013, 11:17
Ответы с готовыми решениями:

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

Округлить число до 25 знаков после десятичной точки
Есть простая задача: вот я ее решаю таким способом, т.к в задании написано округлить ...

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

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

53
249 / 219 / 63
Регистрация: 30.07.2013
Сообщений: 465
05.08.2013, 15:38 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Фейлится на девятке.
В данном конкретном случае не фейлится, после единственной 9-ки идет 0.
0
5 / 5 / 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
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
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
5 / 5 / 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
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
06.08.2013, 16:49 25
Bohes_, как уже делалось в прошломпримере:
C++
1
main( int x )
char s[7]; -у тебя слишком маленький массив был.
o << *s!=72 && !(x%2)?"No":"Yes"; // Куча ненужных скобок.
1
5 / 5 / 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
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
06.08.2013, 17:03 27
Цитата Сообщение от Bohes_ Посмотреть сообщение
*s!=72
Попробуй *s - 72
1
5 / 5 / 0
Регистрация: 18.06.2013
Сообщений: 51
06.08.2013, 17:07  [ТС] 28
nonedark2008, спасибо, работает и 132 символа. Только не понятно, как можно записать решение на С++ за 114 символов
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
06.08.2013, 17:16 29
o << *s-72 && !(x%2)?"No":"Yes";
Без скобок тоже проходит
0
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 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
5 / 5 / 0
Регистрация: 18.06.2013
Сообщений: 51
06.08.2013, 17:27  [ТС] 31
Цитата Сообщение от Schizorb Посмотреть сообщение
main(int n)
Как я писал выше, такое объявление переменной не подходит для тестирующей системы.
Цитата Сообщение от Schizorb Посмотреть сообщение
o << (!s[4] + n % 2 ? "Yes" : "No");
Очень элегантное решение
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
06.08.2013, 17:28 32
Цитата Сообщение от Schizorb Посмотреть сообщение
!s[4] + n % 2
Приоритет операций?
0
5 / 5 / 0
Регистрация: 18.06.2013
Сообщений: 51
06.08.2013, 17:28  [ТС] 33
Цитата Сообщение от nonedark2008 Посмотреть сообщение
o << *s-72 && !(x%2)?"No":"Yes";
Без скобок тоже проходит
К сожалению, не проходит
0
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
06.08.2013, 17:29 34
nonedark2008, что с ним не так?
0
5 / 5 / 0
Регистрация: 18.06.2013
Сообщений: 51
06.08.2013, 17:39  [ТС] 35
Цитата Сообщение от Schizorb Посмотреть сообщение
nonedark2008, что с ним не так?
Ваше решение работает:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
#include <fstream>
 
int main()
{
    int x;
    char s[9];
    std::fstream f("input.txt"), o ("output.txt",2);
    f>>s>>x;
    o<<(!s[4] + x % 2 ? "Yes" : "No");      
}
128 символов

Добавлено через 6 минут
Schizorb, !s[4] это проверка на что ?
0
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
06.08.2013, 17:42 36
Цитата Сообщение от Bohes_ Посмотреть сообщение
Schizorb, !s[4] это проверка на что ?
Проверка на нуль-символ. В слове "Home" у него будет индекс 4 (поэтому !s[4] вернет истину), а в слове "School" - там буковка (вернет ложь).
1
5 / 5 / 0
Регистрация: 18.06.2013
Сообщений: 51
06.08.2013, 17:51  [ТС] 37
[QUOTE=Bohes_;4921653]Ваше решение работает:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
#include <fstream>
 
int main()
{
    int x;
    char s[9];
    std::fstream f("input.txt"), o ("output.txt",2);
    f>>s>>x;
    o<<(!s[4] + x % 2 ? "Yes" : "No");      
}
121 символ
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
06.08.2013, 20:21 38
Цитата Сообщение от Bohes_ Посмотреть сообщение
C++
1
o<<(!s[4] + x % 2 ? "Yes" : "No");
может так прокатит:
C++
1
o << (*s & ~x & 1 ? "No" : "Yes");
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
06.08.2013, 21:25 39
PWNED! Число E сделал 94 символа Код как-нибудь потом выложу, если никто сам не придумает, а пока несколько подсказок:
1) Пробелы и ещё кое-какие похожие на них символы не считаются, даже если они внутри строки в кавычках. Строку можно преобразовать циклом по определённому алгоритму.
2) Если код больше 16k символов, то вместо подсчёта символов используется размер файла. (Из-за много пришлось подумать.)
3) Можно использовать функцию system.
2
5 / 5 / 0
Регистрация: 18.06.2013
Сообщений: 51
07.08.2013, 05:35  [ТС] 40
Цитата Сообщение от gray_fox Посмотреть сообщение
может так прокатит:
C++
1
o << (*s & ~x & 1 ? "No" : "Yes");
Time limit exceeded

Добавлено через 4 часа 20 минут
Цитата Сообщение от Somebody Посмотреть сообщение
PWNED! Число E сделал 94 символа Код как-нибудь потом выложу, если никто сам не придумает, а пока несколько подсказок:
1) Пробелы и ещё кое-какие похожие на них символы не считаются, даже если они внутри строки в кавычках. Строку можно преобразовать циклом по определённому алгоритму.
2) Если код больше 16k символов, то вместо подсчёта символов используется размер файла. (Из-за много пришлось подумать.)
3) Можно использовать функцию system.
1)Как не странно, но табуляции иногда считаются
2) А смысл писать файл в 16Кб? Все равно с 16к символами в рейтинг не пролезешь...
3)В system есть значение экспоненты?
0
07.08.2013, 05:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.08.2013, 05:35
Помогаю со студенческими работами здесь

Выведите первую цифру числа после десятичной точки
Дано положительное действительное число X. Выведите его первую цифру после десятичной точки. ...

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

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

Найдите такое число x, что x^2+√x=C , с точностью не менее 6 знаков после точки
Найдите такое число x, что x^2+√x=C , с точностью не менее 6 знаков после точки. Я думал, что это...


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

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