Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/29: Рейтинг темы: голосов - 29, средняя оценка - 4.52
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740

Счастливые числа

25.12.2013, 05:01. Показов 5813. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот мой код:
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 <stdio.h>
 
int main()
{
    int T,count,i,s,k,l,r;
 
    s = 0;
    k = 0;
 
    scanf("%d", &T);
 
    for(count = 1;count <= T;count++){
        scanf("%d %d", &l, &r);
 
        for(i = l;i <= r;i++){
            if(i / 4 == 1 || i / 7 == 1)
                s = k + 1;
        }
        printf("%d\n", s);
    }
 
    return 0;
}
В задаче нужно вычислить количество чисел между L и R включительно, которые нацело делятся на 4 или на 7. То есть если даны числа 4 и 7, то должно выдать 2. У меня всегда выводит 1. Даже если я выбираю числа 0 и 0. В чем проблема?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.12.2013, 05:01
Ответы с готовыми решениями:

Счастливые числа
Счастливым будем считать такое число из шести цифр, кортом сумма левых трех цифр равна сумме правых трех цифр. Найти все счастливые билеты...

Счастливые числа <N
2n-разрядное число считается счастливым, если у него сумма первых n цифр равна сумме вторых n цифр. вывести все такие числа меньшие N(N...

Счастливые числа
Счастливым числом называется натуральное число, у которого сумма цифр первой половины равна сумме цифр второй половины. К числам с нечетным...

21
 Аватар для uhx
60 / 60 / 19
Регистрация: 11.07.2013
Сообщений: 305
25.12.2013, 05:25
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
 
int main(){
    setlocale(0,"");
    int i,s,k,l,r;
    s = 0;
    k = 0;
    cin>>l>>r;
        for(i = l;i <= r;i++){
            if(!(i%4))s++;
            if(!(i%7))s++;
        }
    cout<<s;
    system("pause>>void");
}
Может так? Ведь если будет число 28, то s должно 2 раза плюсануть, т.к. оно делится нацело и на 4, и на 7...
0
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
25.12.2013, 05: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
24
#include <stdio.h>
 
int main()
{
    int T,count,i,s,k,l,r;
 
    s = 0;
    k = 0;
 
    scanf("%d", &T);
 
    for(count = 1;count <= T;count++){
        scanf("%d %d", &l, &r);
 
        for(i = l;i <= r;i++){
            if(i / 4 || i / 7)
                k+=1;
            s = k;  
        }
        printf("%d\n", s);
    }
 
    return 0;
}
Теперь количество вычисляется не для отдельных тестов а все прибавляется и прибавляется, пока программа не завершится. И почему то когда я ввожу числа 4 и 7, то мне выдает 4, то есть и 5/4 и 6/4. А мне нужно суммировать количество тех чисел, которые делятся нацело без остатка на 4 или на 7. Как это сделать?
0
 Аватар для uhx
60 / 60 / 19
Регистрация: 11.07.2013
Сообщений: 305
25.12.2013, 06:01
Я разве написал не готовый код?
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
И почему то когда я ввожу числа 4 и 7, то мне выдает 4, то есть и 5/4 и 6/4. А мне нужно суммировать количество тех чисел, которые делятся нацело без остатка на 4 или на 7. Как это сделать?


Добавлено через 2 минуты
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Я понимаю. Но мне же нужно, чтобы количество чисел в цикле вычислялось.
Цитата Сообщение от uhx Посмотреть сообщение
if(!(i%4))s++;
if(!(i%7))s++;
Я тебя что-то не понимаю. Ты мой код то компилил?
1
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
25.12.2013, 06:13  [ТС]
Да, теперь количество вычисляется. Но мне нужно чтоб количество вычислялось для каждого теста отдельно. То есть, если первый раз я введу 4 7 - покажет 2, а второй раз я введу 3 4 и должно показать 1. А сейчас программа к 2-ум прибавляет 1.
0
 Аватар для uhx
60 / 60 / 19
Регистрация: 11.07.2013
Сообщений: 305
25.12.2013, 06:32
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
int main(){
    setlocale(0,"");
    int i,s,k,l,r;
    cout<<"Кол-во тестов: ";
    cin>>k;
    while(k--){
        s=0;
        system("cls");
        cin>>l>>r;
        for(i = l;i <= r;i++){
            if(!(i%4))s++;
            if(!(i%7))s++;
        }
    cout<<s;
    system("pause>>void");
    }
}
Добавлено через 1 минуту
Теперь вроде все) Удачи.
0
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
25.12.2013, 06:33  [ТС]
Так как сделать вычисление количества чисел отдельно для каждого теста, чтоб оно не суммировалось? Помогите.
0
 Аватар для uhx
60 / 60 / 19
Регистрация: 11.07.2013
Сообщений: 305
25.12.2013, 06:36
Sh@dow777, обновить тему и скопировать мой код Могу комменты написать, если чего не понятно.
1
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
25.12.2013, 07:03  [ТС]
Спасибо огромное! Как я не догадался s = 0 в цикл вставить.

Добавлено через 3 минуты
Я просто только начал изучать программирование. Надо зачет сдать. На каникулах буду сидеть сам пытаться задачи решать.

Добавлено через 19 минут
Я проверил ответ на сайте с задачами и система проверки не приняла задачу. Я посмотрел, как там показано, как должно быть. Я ввел числа 3 33 и мне выдало 12, а показано, что должно быть 11. Ввел 1234 4321 - мне выдало 1213, а должно выдать 1103. Я ничего не понимаю, что они хотят.
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
25.12.2013, 07:21
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Я ничего не понимаю, что они хотят.
они хотят, чтобы числа кратные 4 и 7 одновременно, считались за одно число (а данный код считает их за два).
Вот так сделайте:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
int main(){
    setlocale(0,"");
    int i,s,k,l,r;
    cout<<"Кол-во тестов: ";
    cin>>k;
    while(k--){
        s=0;
        system("cls");
        cin>>l>>r;
        for(i = l;i <= r;i++){
            if(!(i%4))s++;else
            if(!(i%7))s++;
        }
    cout<<s;
    system("pause>>void");
    }
}
1
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
25.12.2013, 07:31  [ТС]
Спасибо. Теперь все правильно. А не могли бы вы мне обьяснить зачем нужны восклицательные знаки перед (i % 4) и перед (i % 7)?

Добавлено через 4 минуты
Извините, но система снова выдала неправильный ответ. Пишет превышено максимальное время работы на тесте 1.
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
25.12.2013, 08:13
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Извините, но система снова выдала неправильный ответ. Пишет превышено максимальное время работы на тесте 1.
Вам программу писали для работы в ручном режиме. Т.е. выдает соббщение, что введите количество тестов, потом считает, выдает результат на экран, потом ждет пока не введете что-нибудь (поэтому и превышено максимальное время). Для тестирующей системы нужно так писать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
int main(){
    setlocale(0,"");
    int i,s,k,l,r;
    cout<<"Кол-во тестов: ";
    cin>>k;
    while(k--){
        s=0;
        system("cls");
        cin>>l>>r;
        for(i = l;i <= r;i++){
            if(!(i%4))s++;else
            if(!(i%7))s++;
        }
    cout<<s;
    system("pause>>void");
    }
}
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
А не могли бы вы мне обьяснить зачем нужны восклицательные знаки перед (i % 4) и перед (i % 7)?
если число делится на 4, то i%4 будет равно 0. Применяя ! к нулю, получаем 1.
Т.е. выражение !(i%4) будет равно 1, когда число i делится на 4 без остатка. Когда число i не делится на 4 без остатка, то выражение !(i%4) будет равно 0.
0
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
25.12.2013, 08:23  [ТС]
Вот я переделал, как вы сказали(только на C)
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 <stdio.h>
 
int main()
{
    long T,count,i,s,k,l,r;
 
 
    scanf("%ld", &T);
 
    for(count = 1;count <= T;count++){
        scanf("%ld %ld", &l, &r);
 
        s = 0;
 
        for(i = l;i <= r;i++){
            if(!(i % 4))
                s++;
            else if(!(i % 7))
                s++;
        }
 
        printf("%ld\n", s);
    }
 
    return 0;
}
И все равно выдает ошибку.
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
25.12.2013, 08:28
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
И все равно выдает ошибку.
полный текст задания напишите здесь.
0
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
25.12.2013, 08:32  [ТС]
Вася называет число счастливым, если оно нацело делится на 4 или на 7. Ваша задача состоит в том, чтобы посчитать количество счастливых чисел между числами L и R включительно.
Input

Первая строка содержит одно число N (1 <= N <= 5000) (количество тестовых случаев). Следующие N строк содержат по 2 числа L и R (1 <= L <= R <= 1,000,000,000) разделенных пробелом.
Output

Для каждого тестового случая в отдельной строке выведите количество счастливых чисел между L и R включительно.
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
25.12.2013, 08:36
Ссылку на сайт с задачей можете дать?
0
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
25.12.2013, 08:49  [ТС]
Это сайт университетский. Поэтому вам нужно будет регистрироваться.

Добавлено через 3 минуты
http://ejudge.crimea.edu/cgi-b... ocale_id=1
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
25.12.2013, 08:50
Хорошо, тогда такие вопросы:
1. Какую ошибку выдает тестирующая система на последний код?
2. Нет ли там в разделе "помощь" или "новичкам" фразы о том что данные нужно считывать из файла и результат записывать в файл?
0
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
25.12.2013, 08:56  [ТС]
1) превышено максимальное время работы на тесте 1.
2) раздела помощь нет.
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
25.12.2013, 09:20
превышение времени было еще из-за таких ограничений:
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Первая строка содержит одно число N (1 <= N <= 5000) (количество тестовых случаев). Следующие N строк содержат по 2 числа L и R (1 <= L <= R <= 1,000,000,000) разделенных пробелом.
в худшем случае время работы было бы: 1000000000*5000, естественно за 1 сек не получилось бы сдать. Пробуйте такой вариант (у меня он прошел):
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
int main()
{
    long T,count,i,s,k,l,r;
    
    scanf("%ld", &T);
 
    for(count = 1;count <= T;count++){
        scanf("%ld %ld", &l, &r);
 
        s = (r/4+r/7-r/28)-((l-1)/4+(l-1)/7-(l-1)/28);
 
        printf("%ld\n", s);
    }
 
    return 0;
}
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.12.2013, 09:20
Помогаю со студенческими работами здесь

Счастливые числа
Как-то не могу вникнуть в суть кода :( Назовем число счастливым, если сумма цифр на четных позициях равня сумме цифр на нечетных...

6-значные счастливые числа
Здравствуйте, прошу помощи! Тема: Функции. Получить все 6-значные счастливые числа, т.е. те, у которых сумма первых трех цифр...

Найти все шестизначные счастливые числа (исправить код)
Задание: Найти все шестизначные счастливые числа. Счастливое число - это число, у которого сумма левых трех цифр равна сумме правых трех....

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

Счастливые билетики
Знаю что задача довольна распространена, но решения для моего случая не нашел. Необходимо найти количество всех счастливых билетов(сумма...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru