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

Определить количество счастливых билетов - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.95
DNCH
0 / 0 / 0
Регистрация: 17.12.2012
Сообщений: 8
18.12.2012, 11:07     Определить количество счастливых билетов #1
Имеется часть катушки с автобусными билетами. Номер билета 6-ти значный. Составить программу. определяющую кол-во счастливых билетов!
Я не могу понять даже как писать её на С++...(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2012, 11:07     Определить количество счастливых билетов
Посмотрите здесь:

C++ Подсчитать общее количество «счастливых» билетов
C++ Подсчитать количество "счастливых" шестизначных автобусных билетов(сумма первых трех цифр равна сумме трех последних цифр)
Задача на поиск "счастливых билетов" C++
C++ Найти количество всевозможных шестизначных счастливых билетов
C++ Составить программу, определяющую количество счастливых билетов на катушке
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
18.12.2012, 11:18     Определить количество счастливых билетов #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
27
28
29
30
31
32
33
34
35
#include "stdafx.h"
#include "iostream"
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
 
    int n;
    int sum1=0, sum2=0;
 
    cout << "Введите шестизначное число: ";
    cin >> n;
    
    for (int i=1; i<=3; i++)
    {
        sum1 += n%10;
        n/=10;
    }
 
    for (int i=1; i<=3; i++)
    {
        sum2 += n%10;
        n/=10;
    }
 
    if (sum1 == sum2)
        cout << "Счастливый билет" << endl;
    else
        cout << "Обычный билет" << endl;
 
    system("pause");
    return 0;               
}
Ой, извиняюсь. Там нужно посчитать количество счастливых билетов
DNCH
0 / 0 / 0
Регистрация: 17.12.2012
Сообщений: 8
18.12.2012, 11:24  [ТС]     Определить количество счастливых билетов #3
Извините
Условие забыл дописать!
Если меньший номер билета N , больший M. Билет является счастливым если сумма первых трёх его цифр равна сумме последних трёх!
LValue
11 / 11 / 0
Регистрация: 27.11.2011
Сообщений: 49
18.12.2012, 11:53     Определить количество счастливых билетов #4
Ну с начала ввод M и N организовать. А потом уже подумать как обрабатывать.
Evgeniy_K86
0 / 0 / 0
Регистрация: 12.11.2012
Сообщений: 4
18.12.2012, 11:58     Определить количество счастливых билетов #5
А потом остаток о деления по модуля на 1000 сравнить с остатком от деления просто на 1000, если равно, то +1, если нет, то цикл продолжить.
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
18.12.2012, 12:08     Определить количество счастливых билетов #6
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
52
53
54
#include "stdafx.h"
#include "iostream"
#include "cmath"
using namespace std;
 
bool Happy(const char str[]);
void IncrementStr(char str[]);
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
 
    int kol = 0;        // количество счастливых билетов
    char str[7]={0};    
 
    for (int i=0; i<=999999; i++)
    {
        if (Happy(str))
            kol++;
 
        IncrementStr(str);
    }
 
    cout << "Общее количество счастливых билетов " << kol << endl;
 
    cout << endl;
    system("pause");
    return 0;               
}
 
 
bool Happy(const char str[])
{
    int sum1=0, sum2=0;
 
    for (int i=0; i<strlen(str)/2; i++)
        sum1 += str[i];
 
    for (int i=strlen(str)/2; i<strlen(str); i++)
        sum2 += str[i];
 
    if (sum1 == sum2)
        return true;
    else
        return false;
}
 
void IncrementStr(char str[])
{
    int n = atoi(str) + 1;
 
    itoa(n, str, 10);
}
Посмотрел в Википедию. И там общее количество этих счастливых билетов 55252, а у меня почему то получается 51037 Не пойму где ошибка
DNCH
0 / 0 / 0
Регистрация: 17.12.2012
Сообщений: 8
18.12.2012, 12:08  [ТС]     Определить количество счастливых билетов #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream.h>
void main;
{int N,M;
cout<<"Vvedite menshii nomer bileta:";
cin>> N;
cout<<"Vvedite bolshii nomer bileta:";
cin>>M;
for (i=N; i<=M; i++)
a:=n / 100000;
b:=n / 10000 % 10;
c:=n / 1000 % 10;
d:=n / 100 % 10;
e:=n / 10 % 10;
f:=n % 10;
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
18.12.2012, 12:27     Определить количество счастливых билетов #8
Цитата Сообщение от v.a.l.i.d Посмотреть сообщение
Не пойму где ошибка
Смотри... у тебя первые билеты будут с номерами 0, 1, 2.... Хотя надо 000000, 000001, 000002...

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <cstring>
using namespace std;
 
bool Happy(const char str[]);
void IncrementStr(char str[]);
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    int kol = 0;        // количество счастливых билетов
    char str[7] = "000000";    
 
    for (int i=0; i<=999999; i++)
    {
        if (Happy(str))
            kol++;
 
        IncrementStr(str);
    }
 
    cout << "Общее количество счастливых билетов " << kol << endl;
 
    cout << endl;
    system("pause");
    return 0;               
}
 
 
bool Happy(const char str[])
{
    int sum1=0, sum2=0;
 
    for (int i=0; i<strlen(str)/2; i++)
        sum1 += str[i];
 
    for (int i=strlen(str)/2; i<strlen(str); i++)
        sum2 += str[i];
 
    if (sum1 == sum2)
        return true;
    else
        return false;
}
 
void IncrementStr(char str[])
{
    //cout << str << "\n";
    
    bool carry = 0;
    
    int i = strlen(str) - 1;
    
    ++str[i];
    do
    {
        str[i] += carry;
        if(str[i] > '9')
        {
            str[i] = '0';   
            carry = 1;
        }
        else
            carry = 0;
        
        --i;
    }
    while(carry && i >= 0);
}
Сделал вручную инкремент строчек, но наверняка можно проще)
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
18.12.2012, 12:46     Определить количество счастливых билетов #9
Цитата Сообщение от Schizorb Посмотреть сообщение
Смотри... у тебя первые билеты будут с номерами 0, 1, 2.... Хотя надо 000000, 000001, 000002...
это одно и тоже =)
C++
1
2
3
4
5
6
7
8
9
10
11
int kol=0;
for(int i1=0;i1<10;i1++)
    for(int i2=0;i2<10;i2++)
        for(int i3=0;i3<10;i3++)
            for(int i4=0;i4<10;i4++)
                for(int i5=0;i5<10;i5++)
                    for(int i6=0;i6<10;i++)
                        if((i1+i2+i3)==(i4+i5+i6)){
                            kol++;
                            cout<<i1<<i2<<i3<<i4<<i5<<i6<<endl;
                         }
LValue
11 / 11 / 0
Регистрация: 27.11.2011
Сообщений: 49
18.12.2012, 14:20     Определить количество счастливых билетов #10
Делим на тысячу целочисленно. Берем полученное значение и сравниваем с остатком от деления на 1000.
C++
1
2
3
4
5
6
7
8
9
10
int n;
...
if ((n / 1000) == (n % 1000))
{
   + 1
}
else
{
  ...
}
Podgornov
3 / 3 / 0
Регистрация: 19.02.2014
Сообщений: 6
19.02.2014, 04:20     Определить количество счастливых билетов #11
Допустим у нас есть шестизначное число. Ну пусть 123456, чтобы определить первые три цифры нужно число разделить на тысячу.
C++
1
123456/1000=123
Осталось найти последние три цифры, для этого достаточно разделить число по модулю на тысячу.
C++
1
123546%1000=456
Числа мы узнали. Нужно узнать теперь сумму цифр в числе, для этого нужно, разделить трёхзначное число на цифры.
C++
1
2
3
123%10=3
123%100/10=2
123/10=1
Цифры получили. Осталось их сложить, думаю это не составит труда, но всё же...
C++
1
int num=(123%10)+(123%100/10)+(123/10); // получили число 6
Тоже самое сделали с числом 456 и всё, у вас есть сумма первых трёх чисел и последних трёх.
Далее просто в цикле перебирайте все числа с 0 до 999.999 и если сумма первых трёх чисел равна сумме последних трёх чисел, bilet++. Это я пытался объяснить Вам как решить эту задачу. Если всё-таки Вы её не решили, то вот решение, но на языке С, увы С++ я ещё не учил.
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
void main()
{
    SetConsoleOutputCP(1251);
    srand((unsigned)time(NULL));
    int arr[999999],sum_num1_3,sum_num4_6,bilet=0;
    for(int i=0;i<999999;i++)
    {
        arr[i]=i;
    }
    for(int i=0;i<999999;i++)
    {
        if(i>0 && i<1001)
        {
            continue;
        }
        sum_num1_3=((arr[i]/1000)/10/10)+((arr[i]/1000)/10%10)+((arr[i]/1000)%10);
        sum_num4_6=((arr[i]%1000)/10/10)+((arr[i]%1000)/10%10)+((arr[i]%1000)%10);
        if(sum_num1_3==sum_num4_6)
        {
            bilet++;
        }
    }
    cout <<"Количество потенциально осчастливленных пассажиров: "<<bilet<<endl;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2015, 00:10     Определить количество счастливых билетов
Еще ссылки по теме:

C++ Программа, которая подсчитывает количество "счастливых" билетов в рулоне и выводит их номера на экран
C++ Подсчитать количество "счастливых" шестизначных билетов в рулоне и вывести их номера на экран
C++ Подсчет количества "счастливых" билетов с заданной суммой цифр

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

Или воспользуйтесь поиском по форуму:
the_TOP
0 / 0 / 1
Регистрация: 08.06.2014
Сообщений: 18
28.07.2015, 00:10     Определить количество счастливых билетов #12
Я делал так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private void button1_Click(object sender, EventArgs e)
        {
            char[] abcdef = new char[6];
 
            for (int i = 0; i <= 999999; i++)
            {
                abcdef = stroki(i).ToCharArray();
                if (Convert.ToInt32(abcdef[0]) + Convert.ToInt32(abcdef[1]) + Convert.ToInt32(abcdef[2]) == Convert.ToInt32(abcdef[3]) + Convert.ToInt32(abcdef[4]) + Convert.ToInt32(abcdef[5]))
                    Lucky.Items.Add(stroki(i));
            }
            MessageBox.Show("Общее количество счастливых билетов: " + Lucky.Items.Count.ToString());
        }
 
        string stroki(int d)
        {
            if (d > 99999) return "" + d;
            else if (d > 9999) return "0" + d;
            else if (d > 999) return "00" + d;
            else if (d > 99) return "000" + d;
            else if (d > 9) return "0000" + d;
            else if (d >= 0 && d <= 9) return "00000" + d;
            else return "0";
        }
правда, такой костыльный метод отражается на скорости вычисления..

Добавлено через 3 минуты
Пардон, не прочитал, что нужно на C++
Мой код на C#

Добавлено через 16 секунд
Пардон, не прочитал, что нужно на C++
Мой код на C#
Yandex
Объявления
28.07.2015, 00:10     Определить количество счастливых билетов
Ответ Создать тему
Опции темы

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