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

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

Войти
Регистрация
Восстановить пароль
 
n00b.vcxproj
Кодер
47 / 46 / 2
Регистрация: 10.10.2010
Сообщений: 229
#1

Летопись - C++

01.11.2011, 22:35. Просмотров 299. Ответов 2
Метки нет (Все метки)

Вообщем, задача с ВКОШПа 2011, задача а
вот, собственно, задачка

Я ее почти решил, только вот уже запутался в своих же условиях:

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
#include <stdafx.h>
#include <stdio.h>
#include <conio.h>
 
using namespace std;
 
bool null(int g1, int g2, int g3)
{
    if(g1 > 31 || g2 > 12 || g3 > 99) //Проверяем на правильность введенной даты
        return 0;
    else if(((g2 == 1 || g2 == 3 || g2 == 5 || g2 == 7 || g2 == 8 || g2 == 10 || g2 == 12) && g1 != 31) || ((g2 == 4 || g2 == 6 || g2 == 9 || g2 == 11) && g1 !=31)) //Проверяем на совпадение кол-ва месяцев/дней
        return 0;
    else if(g2 == 2)
        if((!(g3+2000%4 == 0 && g3+2000%100 != 0 || g3+2000%400 == 0) && (g2 == 2 && g1 > 28)) || ((g3+2000%4 == 0 && g3+2000%100 != 0 || g3+2000%400 == 0) && (g2 == 2 && g1 > 29))) //Проверяем на високосный год
            return 0;
    if(g1 < 10)                 //Выводим
        printf("0%d/", g1);     //числа
    else                        //с
        printf("%d/", g1);      //нулями,
    if(g2 < 10)                 //если
        printf("0%d/", g2);     //это
    else                        //необходимо
        printf("%d/", g2);
    if(g3 < 10)
        printf("0%d\n", g3);
    else
        printf("%d\n", g3);
}
 
int main()
{
    int a[3];
    scanf("%d/%d/%d", &a[0], &a[1], &a[2]); //Подбираем дату
    if(a[0] > 31 || a[1] > 12 || a[2] > 99) //Проверяем на правильность введенной даты
    {
        printf("No such date");
        return 0;
    }
    else if(a[0] == a[1] && a[2] == a[1])   //Если все числа одинаковы, то выводим только эту последовательность
        null(a[0], a[1], a[2]);
    else
    {
        null(a[0], a[1], a[2]);
        null(a[0], a[2], a[1]);
        null(a[1], a[0], a[2]);
        null(a[1], a[2], a[0]);
        null(a[2], a[0], a[1]);
        null(a[2], a[1], a[0]);
        _getch();
    }
}
Прошу вас обьяснить ошибку, она в функции null();.
Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2011, 22:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Летопись (C++):

Задача "Правдивая летопись" - Free Pascal
Решите, пожалуйста, эту задачу. Или хотя бы намекните на решение. Заранее, спасибо. Задача &quot;Правдивая летопись&quot; Условие: &quot;...И...

Задача "Правдивая летопись" - Free Pascal
Решите, пожалуйста, эту задачу. Или хотя бы намекните на решение. Заранее, спасибо. Задача &quot;Правдивая летопись&quot; Условие: &quot;...И...

Задача "Правдивая летопись" - Free Pascal
Решите, пожалуйста, эту задачу. Или хотя бы намекните на решение. Заранее, спасибо. Задача &quot;Правдивая летопись&quot; Условие: &quot;...И...

Задача "Правдивая летопись" - Free Pascal
Решите, пожалуйста, эту задачу. Или хотя бы намекните на решение. Заранее, спасибо. Задача &quot;Правдивая летопись&quot; Условие: &quot;...И...


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

Или воспользуйтесь поиском по форуму:
2
MrGluck
Модератор
Эксперт CЭксперт С++
7492 / 4607 / 693
Регистрация: 29.11.2010
Сообщений: 12,602
02.11.2011, 00:43 #2
Зачем вы 3 входных числа проверяете как будто они уже упорядочены по критерию месяц/день/год

Нужно проверить так: если два больше чем 31 либо 3 больше чем 12. Это если не проверять на условие, что числа должны быть в интервале от 1 до 99.

Да и ввод/вывод должны быть в файлы.
0
n00b.vcxproj
Кодер
47 / 46 / 2
Регистрация: 10.10.2010
Сообщений: 229
02.11.2011, 06:52  [ТС] #3
Цитата Сообщение от MrGluck Посмотреть сообщение
ввод/вывод должны быть в файлы
видите ли, контест уже закончился и задачи решаю я для общего развития
Цитата Сообщение от MrGluck Посмотреть сообщение
Зачем вы 3 входных числа проверяете как будто они уже упорядочены по критерию месяц/день/год
это вы насчет
Цитата Сообщение от n00b.vcxproj Посмотреть сообщение
if(a[0] > 31 || a[1] > 12 || a[2] > 99) //Проверяем на правильность введенной даты
{
printf("No such date");
return 0;
}
?
введенная дата должна быть именно такого вида, разве нет?
вообщем, перепишу как сказали Вы.
0
Ответ Создать тему
Опции темы

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