Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Найти ошибку в коде.


Автор: CppDevelopeR 25.9.2008, 19:34
Вообщем вот условие:
Задача A. День святого Франциска Ксавьера

Сегодня в индийском городке Старый Гоа отмечают День святого Франциска Ксавьера. Святой Франциск Ксавьер – миссионер, член ордена иезуитов, считается величайшим католическим миссионером Нового времени.

Мощи святого Франциска Ксавьера – духовного покровителя индийских христиан – покоятся в Старом Гоа в известном католическом храме – Базилике Бом Иисус. Со дня постройки храма в 1605 году раз в десять лет мощи святого выставляются для всеобщего обозрения. 

Индийский крестьянин Вирмарам  – человек очень набожный, он не упускал случая коснуться святых мощей. Зная годы его жизни, определите, сколько раз он мог коснуться святых мощей (считается, что в год своего рождения он не мог этого сделать, а в год смерти – мог).

Входные данные
Вводятся два натуральных числа – год рождения и год смерти. Числа разделены пробелом.

Выходные данные
Программа должна  определить, сколько раз крестьянин мог коснуться святых мощей,  и вывести ответ - одно число
 
Ограничения
Все входные данные – натуральные числа, не превосходящие 2000.

вот мой код:
Код

#include<iostream>

using namespace std;

int main(){
    int a, b, c, d, i;
    cin >> a >> b;
    if (a > b){
     cout<<"0"<<endl;
     return 0;
    }
    if (b < 1605){
         cout << "0" << endl;
         return 0;
    }
     if (b == 1605 && a < 1605){
         cout << "1" << endl;
         return 0;
    }

    else{
    d = 0;
    i = a + 1;
     while (i != b + 1){
         if(i % 10 == 5){
             d=d+1;
         }
         i = i + 1;
     }

     cout << d << endl;
     }
     }




Можете исправить код, чтобы программа работала верно. ПС. Запарывается например если ввести 400 и 700...

Автор: Hades 25.9.2008, 20:22
Цитата(CppDevelopeR @  25.9.2008,  19:34 Найти цитируемый пост)
Запарывается например если ввести 400 и 700

что означает - Запарывается, выводит нуль что ли?

тогда всё правильно, храм построили в 1605, а крестьянин умер в 700,  значит и не мог он коснутся святых мощей.

Автор: CppDevelopeR 25.9.2008, 20:36
Hades, ой, точно, спасибо! Я просто написал неправильно. ЗАпарывается не на 400 и 700, а на 1400 и 1700))

Автор: IKM2007 25.9.2008, 20:37
CppDevelopeR, по-моему лучше писать так(так меньше шагов).
Код

#include<iostream>

using namespace std;

int main(){
    int a, b;
    cin>>a>>b;
    if (a >= b||b < 1605)
    {
     cout<<"0\n";
     return 0;
    }
    else{
        int d=0, i=a+1;//для случая a=1605;
        if(a<1605)
            i=1605;
        else
        while(i%10!=5)
            i++;
        while (i<=b){
          d++;
         i+=10;
     }

     cout << d << endl;
     }
     }


Добавлено через 7 минут и 12 секунд
и правильно. smile

Добавлено через 8 минут и 17 секунд
Цитата(CppDevelopeR @  25.9.2008,  20:36 Найти цитируемый пост)
 ЗАпарывается не на 400 и 700, а на 1400 и 1700))

Смотри в моем коде строки 15,16.

Автор: Rodman 25.9.2008, 22:24

M
Rodman
Модератор: Название темы должно отражать ее суть!

Автор: Hades 26.9.2008, 16:37
можно обойтись и без циклов
Код

int main() {
    int a, b, m;

    cin >> a >> b;

    if (a >= b || b < 1605) {
        m = 0;
    }
    else {
        if (1605 > a)
            m = (b - 1605) / 10 + 1;
        else if (1605 == a)
            m = (b - 1605) / 10;
        else
            m = (b - 1605)/10  - (a - 1605)/10;
     }

    cout << m << endl;

    return 0;
}

Автор: Oleg_Ci 28.9.2008, 08:27
А если с циклами, то так smile 
Код

int a, b, i;
cin >> a >> b;
if (a<1614) a=1614;
for( i=0; a<b; i++, a+=10 );
cout << i;

Автор: IKM2007 28.9.2008, 10:07
Oleg_Ci, а если a=1600 и b=1615, то по твоему коду будет 1 раз, а на самом деле 2 раза.

Автор: Oleg_Ci 28.9.2008, 11:09
Исправил smile 
Код
int a, b, i;
cin >> a >> b;
a = a*(a/1605)+10;  // <<<
if (a<1605) a=1605;
for( i=0; a<=b; i++, a+=10 );  //  (a<=b)
cout << i;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)