Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/48: Рейтинг темы: голосов - 48, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 22.02.2013
Сообщений: 6

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

22.02.2013, 12:09. Показов 9518. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Парни помогите вот задание При написании программы использовать операторы арифметических присваиваний.
Счастливым будет считаться такое число из шести цифр, в котором сумма левых трех цифр равна сумме правых трех, например: 457961:4+5+5=9+6+1=16. найдите все счастливые числа в интервале от 100000 до 999999и подсчитать их количество. жду ответов заранее спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.02.2013, 12:09
Ответы с готовыми решениями:

*Счастливые* числа
Здравствуйте. Помогите,пожалуйста,понять что за числа эти - *Счастливые числа*. Перерыл гугл,там несколько вариантов ответов.Не могу понять...

Счастливые билеты
Ограничение по времени: 2 секунды Ограничение по памяти: 64 мегабайта Билет состоит из четного числа N цифр в М-ричной системе...

Задача про счастливые билеты
Доброе время суток. Застопорился на задаче: "Назовем автобусный билет несчастливым, если сумма цифр его шестизначного номера делится на 13....

11
 Аватар для Lancaster
63 / 63 / 12
Регистрация: 29.08.2012
Сообщений: 152
22.02.2013, 13:41
Вот мой вариант, немного коряво, но все прекрасно работает

Java
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
package luckynumber;
 
public class LuckyNumber {
 
    private final int min = 100000;
    private final int max = 999999;
    private int current = min;
    private int count = 0;
 
    public LuckyNumber() {
        search();
    }
 
    public static void main(String[] args) {
        LuckyNumber ln = new LuckyNumber();
    }
 
    private void search() {
 
        for (; current <= max; current++) {
            
            int left = 0;
            int right = 0;
            
            char[] arrLeft = Integer.toString(current).substring(0, 3).toCharArray();
            char[] arrRight = Integer.toString(current).substring(3, 6).toCharArray();
            
            for(char c : arrLeft){
                left += Integer.parseInt(String.valueOf(c));
            }
            
            for(char c : arrRight){
                right += Integer.parseInt(String.valueOf(c));
            }
            
            if(left == right){
                count++;
                
                output(current, left, right, arrLeft, arrRight);
            }
 
        }
        
        System.out.println("Всего совпадений: "+count);
 
    }
 
    private void output(int cur, int left, int right, char[] arrLeft, char[] arrRight) {
        
         System.out.println("Число: "+cur);
                 
        for(char c : arrLeft){
            System.out.print(String.valueOf(c)+" ");
        }
        
        System.out.print(" == ");
                
        for(char c : arrRight){
            System.out.print(String.valueOf(c)+" ");
        }
                
        System.out.printf("\n %d == %d \n ------------ \n", left, right);
    }
}

Не забудь заменить имя проекта на свой
1
0 / 0 / 0
Регистрация: 22.02.2013
Сообщений: 6
01.03.2013, 10:32  [ТС]
А не мог бы ты чуть-чуть прокомментировать свою работу, что выполняется на каждом этапе? Зарание спосибо!!!!
0
 Аватар для Lancaster
63 / 63 / 12
Регистрация: 29.08.2012
Сообщений: 152
01.03.2013, 14:26
okay
Java
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
74
75
76
77
package luckynumber;
 
public class LuckyNumber {
    
    // Задается мин и макс, current - текущее число, count - счетчик(если найдено совпадение, то ++)
    private final int min = 100000;
    private final int max = 999999;
    private int current = min;
    private int count = 0;
    
    // Из конструктора класса запускается метод search()
    public LuckyNumber() {
        search();
    }
 
    public static void main(String[] args) {
        LuckyNumber ln = new LuckyNumber();
    }
 
    private void search() {
        
        // В цикл помещается текущее число и увеличивается на 1, пока не будет равно макс
        for (; current <= max; current++) {
            
            // Эти переменные будут хранить сумму левых и правых трех чисел
            int left = 0;
            int right = 0;
            
            // Массивы левых и правых трех чисел, где каждое число отдельный элмент массива
            // Переводим тек.число в строку, substring(0,3) вытаскивает из текущей строки 
            // первые 3 цифры(индексация начинается с 0) не включая 3й индекс
            // С правой частью аналогично
            char[] arrLeft = Integer.toString(current).substring(0, 3).toCharArray();
            char[] arrRight = Integer.toString(current).substring(3, 6).toCharArray();
            
            // переменная C равняется каждому элементу массива arrLeft поочередно начиная с первого элемента
            // т.к. C символ, переводим в строку, потом в число
            // left складывается с каждым значением C
            for(char c : arrLeft){
                left += Integer.parseInt(String.valueOf(c));
            }
            
            for(char c : arrRight){
                right += Integer.parseInt(String.valueOf(c));
            }
            
            // Если левая сторона равна правой, то срабатывает условие
            if(left == right){
                count++;
                
                // Метод, который будет выводить все в окно вывода
                output(current, left, right, arrLeft, arrRight);
            }
 
        }
        
        System.out.println("Всего совпадений: "+count);
 
    }
 
    private void output(int cur, int left, int right, char[] arrLeft, char[] arrRight) {
        
         System.out.println("Число: "+cur);
                 
        for(char c : arrLeft){
            System.out.print(String.valueOf(c)+" ");
        }
        
        System.out.print(" == ");
                
        for(char c : arrRight){
            System.out.print(String.valueOf(c)+" ");
        }
                
        System.out.printf("\n %d == %d \n ------------ \n", left, right);
    }
}

Не мастер объяснений, но думаю более менее будет понятно
1
 Аватар для Fedorys
496 / 204 / 18
Регистрация: 19.03.2013
Сообщений: 463
14.06.2013, 17:56
Нашел следующий алгоритм подсчета счастливых чисел (для 6-значных, но это не принципиально):
Сумма трех цифр принадлежит диапазону [0,27]. Допустим, что нам удалось подсчитать, сколько раз встретилась каждая сумма sk ( количество сочетаний, давшее сумму k). Тогда количество "счастливых" чисел будет равно s20+s21+...+s227. Вот это последнее утверждение мне как-то не очень ясно. Может кто-то пояснить?
0
 Аватар для verylazy
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
14.06.2013, 18:49
Если я не ошибаюсь, то первое счастливое число после ста тысяч это 100001.
Дальше все до смешного просто - прибавляем по 1001 и считаем или выводим на экран пока не доберемся до 999999
Программу писать лень, проверил в экселе.
0
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
14.06.2013, 21:33
123114
0
 Аватар для verylazy
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
14.06.2013, 22:32
Цитата Сообщение от KuKu Посмотреть сообщение
123114
ok, you win
тогда так
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    public static void main(String[] args) {
 
        int happyNumbersQty = 0;
        for (int i = 100000; i < 999999; i++) {
            int digitSix = i % 10;
            int digitFive = (i / 10) % 10;
            int digitFour = (i / 100) % 10;
            int digitThree = (i / 1000) % 10;
            int digitTwo = (i / 10000) % 10;
            int digitOne = (i / 100000) % 10;
            if ((digitOne + digitTwo + digitThree) == (digitFour + digitFive + digitSix)) {
                happyNumbersQty++;
            }
        }
        System.out.println("Количество счастливых чисел: "+happyNumbersQty);
    }
фу парсить строки...
0
 Аватар для Fedorys
496 / 204 / 18
Регистрация: 19.03.2013
Сообщений: 463
16.06.2013, 12:00
Так... Моя вина. Не до конца объяснил в чем проблема.
verylazy, вы привели алгоритм подсчета в лоб количества счастливых чисел. Количество операций в программе как легко видеть ~900 тыс.
Тот алгоритм, о котором говорю я в работает почти в 900 раз быстрее.
Java
1
2
3
4
5
6
7
8
 for(k=0; k<28; k++) s[k]=0;
  for(int j1=0; j1<10; j1++)
    for(int j2=0; j2<10; j2++)
      for(int j3=0; j3<10; j3++)
        s[j1+j2+j3]++;
  for(k=0; k<28; k++)
    n += s[k]*s[k];
  System.out.println("Количество счастливых чисел: "+ n);
P.S. Кстати, verylazy, в вашей программе ошибка. Одно счастливое число она не учитывает.
0
 Аватар для verylazy
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
16.06.2013, 12:43
Какое число не учитывает?
Я очень люблю оптимизировать, но для себя, а на этом форуме оптимизация скорости выполнения программы никому не нужна, тем более ТСу, который нас наверняка уже покинул. будет она считать несколько миллисекунд данную задачу или на несколько десятков мс быстрее мне фиолетово
0
 Аватар для Fedorys
496 / 204 / 18
Регистрация: 19.03.2013
Сообщений: 463
16.06.2013, 13:08
verylazy, я ни в коем случае не хотел Вас обидеть. Просто одна крохотная ошибка все же присутствует в строке:
Цитата Сообщение от verylazy Посмотреть сообщение
for (int i = 100000; i < 999999; i++)
Тут надо нестрогое неравенство.
А я все же задал вопрос именно для оптимизации. Тем на форуме про "счастливые числа" полно. Плодить я их не стал, а решил спросить там, где этот вопрос уже поднимался.
Я не понимаю вывода о том почему сумма квадратов в описанном мной алгоритме дает требуемое число. Именно в этом состоит мой вопрос.
0
 Аватар для verylazy
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
16.06.2013, 13:47
Черт побери, точно насчет равенства!
И кстати, твоя программа выдает совсем другое количество счастливых чисел, или я что-то неправильно дописал в ней когда проверял как она работает, код не весь, без объявлений
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.06.2013, 13:47
Помогаю со студенческими работами здесь

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

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

Счастливые числа
Задание: Получить все шестизначные счастливые номера. Счастливым называют такое шестизначное число, в котором сумма его первых трёх...

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

Счастливые числа
Допоможіть у розв'язку задачі Програміст і Математик їздять в казковому тролейбусі, в якому номера квитків - п'ятизначні числа. Купуючи...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru