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

"Число E" - не принимает решение - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
koka3000
11 / 11 / 3
Регистрация: 02.02.2011
Сообщений: 211
06.05.2011, 14:27     "Число E" - не принимает решение #1
Ссылка на задачу: http://********/?main=task&id_task=46
Вот как я сделал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <fstream>
 
using namespace std;
 
int main()
{
    int namber[] = {2,7,1,8,2,8,1,8,2,8,4,5,9,0,4,5,2,3,5,3,6,0,2,8,7,5};
    int n;
    ifstream ifs("INPUT.TXT");
    ifs >> n;
    ifs.close();
    for(int i = 25; i > n; --i)
        if(namber[i] > 5)
            namber[i - 1] += 1;
    ofstream ofs("OUTPUT.TXT");
    ofs << namber[0];
    if(n != 0)
    ofs << ".";
    for(int i = 1; i < n + 1; i++)
        ofs << namber[i];
    return 0;
}
НО мое решение сайт не хочет принимать! Что делать? Я же вродже бы сделал все правильно...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2011, 14:27     "Число E" - не принимает решение
Посмотрите здесь:

Дано натуральное число. Найти сумму последних "n" цифр "n" числа, не применяя переменых значений C++
C++ дано четырехзначное число. если сумма первых 2 цифр=сумме 2 последних, написать "yes", иначе "no"
Game "Угадай число" как зделать запрет на "букви" ???? C++
Мой компилятор не принимает "getline" и не хочет массив объявлять peson p[a] C++
C++ Как принять код клавиши, а вписать саму клавишу? (Принимает "57", что означает "9")
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
06.05.2011, 14:50     "Число E" - не принимает решение #2
хз вообще-то может алгорим округления неправильный, и то: округлить, надо, допустим, число

2,б285555555555555555555555555555555565555555555

До трёх знаков после запятой
Вот если округлять вручную, то просто рассматриваем

2,6285; потом пишем 2, 628 и всё на этом

А если по твоему алгоритму, так это мы должны с конца рассмотреть, наткнуться на 6-ку и потом
в результате получить 2,629. Оно, конечно, точнее, но могут придраться, опять же, ты выходной файл не закрыл.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
06.05.2011, 14:54     "Число E" - не принимает решение #3
Вообще в данном случае можно просто посмотреть на следующую за нужной цифру, необязательно округлять все число.
Veyron
 Аватар для Veyron
104 / 104 / 4
Регистрация: 02.06.2009
Сообщений: 579
06.05.2011, 15:16     "Число E" - не принимает решение #4
Цитата Сообщение от diagon Посмотреть сообщение
Вообще в данном случае можно просто посмотреть на следующую за нужной цифру, необязательно округлять все число.
А если нужно допустим округлить до третьей цифры, четвертой у нас стоит 4, а пятой стоит 8?


Цитата Сообщение от kravam Посмотреть сообщение
Оно, конечно, точнее, но могут придраться, опять же, ты выходной файл не закрыл.
Это нужно для красоты стиля. Бывало я тоже не закрывал файлы, но все прекрасно принималось.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
06.05.2011, 15:26     "Число E" - не принимает решение #5
Цитата Сообщение от Veyron Посмотреть сообщение
А если нужно допустим округлить до третьей цифры, четвертой у нас стоит 4, а пятой стоит 8?
Четвертой стоит 2.
И вообще, я уже решил эту задачу таким способом и она прошла все тесты. На этом сайте довольно таки мало задач, сложность которых только в реализации... В основном там сложность в правильном понимании условия.
Veyron
 Аватар для Veyron
104 / 104 / 4
Регистрация: 02.06.2009
Сообщений: 579
06.05.2011, 15:32     "Число E" - не принимает решение #6
Цитата Сообщение от diagon Посмотреть сообщение
Четвертой стоит 2.
Я не имел ввиду эту задачу, а общий случай. Тем более, что в С++ есть средства по округлению.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
06.05.2011, 15:34     "Число E" - не принимает решение #7
Пробовал я и через setfixed, но выяснилось, что при примерно 10 знаков после запятой(точно не помню уже)он начинает округлять неверно. У этой задачи сложность 12%, не стоит видеть грабли там, где их нет.
Veyron
 Аватар для Veyron
104 / 104 / 4
Регистрация: 02.06.2009
Сообщений: 579
06.05.2011, 15:36     "Число E" - не принимает решение #8
Цитата Сообщение от diagon Посмотреть сообщение
Пробовал я и через setfixed
если имеете ввиду это:
C++
1
cout.setf(ios::fixed);
то это не округляет, а просто форматирует вывод.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
06.05.2011, 15:47     "Число E" - не принимает решение #9
Извиняюсь, имелся в виду setprecision
Veyron
 Аватар для Veyron
104 / 104 / 4
Регистрация: 02.06.2009
Сообщений: 579
06.05.2011, 15:56     "Число E" - не принимает решение #10
2 TC:
В решении задач существенно помогает Гоогле, а также чтение обсуждения задачи (под сдачей задачи есть меню "Обсуждение"). В гугле можно поискать методы округления. А в обсуждении приведены решения (есть быдловские, но рабочие).
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
06.05.2011, 16:19     "Число E" - не принимает решение #11
В общем вот код, проходит все тесты.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
main(){
    int a,i;
    char s[35]="2.7182818284590452353602875";
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    std::cin >> a;
    if (a)
        {if (s[a+2]>=53) s[a+1]++;
            for (i = 0; i < a+2; i++) {
                std::cout << s[i];
            }
             }
    else std::cout << 3;
    return 0;
}
Veyron
 Аватар для Veyron
104 / 104 / 4
Регистрация: 02.06.2009
Сообщений: 579
06.05.2011, 16:28     "Число E" - не принимает решение #12
Не хочу занудничать, но выходит, что на контестере может работать и не совсем верное решение...
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
06.05.2011, 16:57     "Число E" - не принимает решение #13
Тоже писал когда-то, проходит все тесты )

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
#include <iostream>
#include <fstream>
#include <string>
 
int main()
{
    std::ifstream ifs ("INPUT.TXT");
    std::ofstream ofs ("OUTPUT.TXT");
    std::string str ("2.7182818284590452353602875");
 
    int N;
    ifs >> N;
 
    if (N == 0) ofs << "3";
        else {
            if (int (str [N + 2] >= 53))
                str [N + 1] = char (int (str[N + 1]) + 1);
 
            for (int i = 0; i < N + 2; i++)
                ofs << str [i];
        }
 
    ifs.close ();
    ofs.close ();
    return 0;
}
Добавлено через 1 минуту
ну там считай как у diagon'a.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2011, 17:23     "Число E" - не принимает решение
Еще ссылки по теме:

C++ Дано целое число , лежащие в диапазоне от -999 до 999.Вывести строку - словесного описание данного числа вида "отрицательное двухзначное число", "отри
C++ Дано натуральное число. Верно ли, что цифра "a" встречается в нем реже, чем цифра "b"?
C++ Макрос, который принимает два значения (a, b) и возвращает строку "ab"

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

Или воспользуйтесь поиском по форуму:
Veyron
 Аватар для Veyron
104 / 104 / 4
Регистрация: 02.06.2009
Сообщений: 579
06.05.2011, 17:23     "Число E" - не принимает решение #14
Ну тут просто промах составителей задачи. При тесте "9" выдает 2.718281828, а должно 2.718281829.
Yandex
Объявления
06.05.2011, 17:23     "Число E" - не принимает решение
Ответ Создать тему
Опции темы

Текущее время: 15:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru