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

Задача на счастливые билеты - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.79
nano86
0 / 0 / 0
Регистрация: 15.05.2012
Сообщений: 10
15.05.2012, 13:18     Задача на счастливые билеты #1
Уважаемые господа ! Будте добры , помогите решить задачку.

Имееться билет с шестизначным номером(числом). Билет считаеться счастливым если сумма первых трех цифр равна сумме трех последних, на пример 10 , 11 или 9 . Подсчитайте количество счастливых билетов для каждой такой суммы. Сколько всего счастливых билетов с шестизначным номером? Выведите на печать все комбинации.

Очень нужно , срочно , пожалуйста . Программа нужна на С++ или Code Blocks
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2012, 13:18     Задача на счастливые билеты
Посмотрите здесь:

Счастливые билеты C++
C++ Программа про счастливые билеты. Не работает.
C++ Счастливые числа
C++ Счастливые билеты
C++ Счастливые билеты
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
JokerNN
132 / 128 / 36
Регистрация: 29.12.2011
Сообщений: 359
15.05.2012, 14:52     Задача на счастливые билеты #2
Программа в лоб, на С, можно ли оптимизировать - не думал.
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()
{
        int digits[6];
        int counter=0, happy_counter=0;
        for (digits[5]=0; digits[5] <10; digits[5]++){
        for (digits[4]=0; digits[4] <10; digits[4]++){
        for (digits[3]=0; digits[3] <10; digits[3]++){
        for (digits[2]=0; digits[2] <10; digits[2]++){
        for (digits[1]=0; digits[1] <10; digits[1]++){
        for (digits[0]=0; digits[0] <10; digits[0]++){
                if ((digits[5]+digits[4]+digits[3])==(digits[2]+digits[1]+digits[0])) 
                {
                        happy_counter++;
                        int i;
                        for (i=5; i>=0; --i)
                        {
                                printf("%d", digits[i]);
                        }
                        printf("\n");
                }
}}}}}}
printf("Happy tickets count= %d\n", happy_counter);
return 0;
}
nano86
0 / 0 / 0
Регистрация: 15.05.2012
Сообщений: 10
15.05.2012, 15:01  [ТС]     Задача на счастливые билеты #3
Cпасибо огромное , все работает привосходно !
Только один вопросик , где указан промижуток от куда и до куда программа начинает считать ?
JokerNN
132 / 128 / 36
Регистрация: 29.12.2011
Сообщений: 359
15.05.2012, 15:07     Задача на счастливые билеты #4
nano86, вобщем-то нигде, я её писал давно для себя из интереса, чтобы посмотреть какова вероятность получить счастливый билетик, считает она от 0 до 999999, но хитрым образом, поразрядно, сделано это для того чтобы не возиться с делениями числа и остатками от его деления.
Самый внешний цикл отвечает за самый старший разряд, самый внутренний - за самый младший.
В телах цикла разряды идут от 0 до 9 - то есть реализован счётчик десятичных цифр. Чтобы явно задавать откуда считать нужно значение каждого разряда менять, то есть например чтобы считать от 10000, нужно digits[4]=1 в теле соответствующего цикла написать. Я на это не расчитывал, по-этому это так неудобно)
nano86
0 / 0 / 0
Регистрация: 15.05.2012
Сообщений: 10
15.05.2012, 16:05  [ТС]     Задача на счастливые билеты #5
Спасибо) Ну чтож , программа работает ,завтра попробуем ее сдать и получить зачет =)
temkasky
81 / 81 / 28
Регистрация: 26.11.2012
Сообщений: 303
02.02.2015, 02:38     Задача на счастливые билеты #6
На днях задали такую же задачу, вот мое решение используя только начальные знания.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <math.h>
using namespace std;
 
void main(){
int k, i, n, right, left, count, total=0;
    for (count = 0; count <= 999999; count++){
        n = count;
        right = 0, left = 0;
        for (i = 1; n > 0; i++){
            k = n % 10, n = n / 10;
            if (i <= 3) right += k;
            else left += k;
        }
        if (right != left);
        else total++;
    }
    cout << total << endl;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.02.2015, 10:40     Задача на счастливые билеты
Еще ссылки по теме:

C++ Счастливые числа
C++ Билеты на метро - задача на оптимизацию
C++ Счастливые билетики

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

Или воспользуйтесь поиском по форуму:
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
02.02.2015, 10:40     Задача на счастливые билеты #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <vector>
int main() {
    int m;
    int count = 0;
    std::vector<int> coll;
    std::cout << "Input sum: "; std::cin >> m;
 
    for(int i = 1; i < 10; ++i)
        for(int j = 0; j < 10; ++j)
            if((m - i - j) >= 0)
                coll.push_back(i * 99 + j * 9 + m);
 
    std::cout << "Total number: " << coll.size() * coll.size() << std::endl;
    for(int i = 0; i < coll.size(); ++i)
        for(int j = 0; j < coll.size(); ++j)
        std::cout << coll[i] << coll[j] << std::endl;
    return 0;
}
Yandex
Объявления
02.02.2015, 10:40     Задача на счастливые билеты
Ответ Создать тему
Опции темы

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