Форум программистов, компьютерный форум, киберфорум
Наши страницы

Java SE (J2SE)

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.69
Иван Сергеевич
0 / 0 / 0
Регистрация: 01.06.2012
Сообщений: 53
#1

Подсчитать, сколько ошибочных табличек оказалось в бракованной партии - Java SE

23.10.2012, 19:06. Просмотров 2728. Ответов 24
Метки нет (Все метки)

Я не так давно начал осваивать JAVA читаю главу решаю задачи... Вообщем и на циклах я зациклился)))
Например есть такая задача....
В городе N есть большой склад на котором существует 50000 различных полок. Для удобства работников руководство склада решило заказать для каждой полки табличку с номером от 00001 до 50000 в местной типографии, но когда таблички напечатали, оказалось что печатный станок из-за неисправности не печатал цифру 2, поэтому все таблички, в номерах которых содержалась одна или более двойка (например, 00002 или 20202) — надо перепечатывать. Напишите программу, которая подсчитает сколько всего таких ошибочных табличек оказалось в бракованной партии.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    int a = 500;
        int sum=0;
        int sum2=0;
        int sum3=0;
        int sum4=0;
        int con=0;
        for (int i = 0; i < 500 ; i++){
            sum = i%10;
            sum2 = i/10;
            sum3 = sum2/10;
            sum4 = sum2%10;
            a = i;
                if (sum == 2 || sum3 == 2 || sum4 == 2){
                a = i;
                con++;
                System.out.println(con+" "+a);
                }
            
            }
Этот код решает такую задачу если табличек 500 и расширить до 50000 можно, но я понимаю это полный бред!!! еще он дает результат по кол-ву бракованных таблиц но выглядит это так:
1 2
2 12
3 20
4 21
***
174 472
175 482
176 492 последняя табличка с цифрой 2 это 492, а из 500 их 176 как сделать чтоб количество бракованных табличек показывалось 1 конечной цифрой
2
12
20
21
22
23
***
462
472
482
492
Всего бракованных табличек 176 (типа того)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2012, 19:06
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Подсчитать, сколько ошибочных табличек оказалось в бракованной партии (Java SE):

Ровный вывод табличек в консоль - Java SE
Мне нужно вывести ровно друг под другом строки. Вывод должен иметь вид таблички. Длинна строк разная и из-за этого сбивается и не...

Определить вероятность, что при проверке всей партии деталей не будет найдено ни одной бракованной - Теория вероятностей
Здравствуйте, нужна помощь в решении следующей задачи: Есть партия деталей в количестве 170 шт. Каждая деталь имеет 3 угла. ...

Ввести двумерный массив 4*4, подсчитать кол-во (+) и (-) элементов и вывести статистику по строкам, сколько (+), сколько (-) и подсчитать общую сумму - C++
не получается никак сделать многомерный массив... помогите пожалуйста #include &lt;iostream&gt; #include &lt;ctime&gt; using namespace...

Сколько ионов натрия из брошенного кристаллика оказалось в этом стакане? - Термодинамика и МКТ
Озеро со средней глубиной 5м и площадью 4км2 «посолили», бросив кристаллик поваренной соли NаСl массой 10 мг. Спустя очень длительное время...

Сколько присутствовало при встрече женщин, если рукопожатий оказалось 84? - Логика и множества
Всем здравствуйте, помогите с задачкой! При встрече в стране Добрых людей жители приветствуют друг друга одним рукопожатием или...

Определить, имеются ли в партии из N деталей бракованные. Если да, то подсчитать их количество - C#
Пригодность детали оценивается по размеру В, который должен соответствовать интервалу A-b, А+b. Определить, имеются ли в партии из N...

24
easybudda
Модератор
Эксперт CЭксперт С++
10020 / 5943 / 1004
Регистрация: 25.07.2009
Сообщений: 11,230
14.07.2013, 16:30 #16
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.Scanner;
 
class BadTables {
    static boolean hasDigit(int n, int d) {
        return ( n % 10 == d ) ? true : ( n < 10 ) ? false : hasDigit(n / 10, d);
    }
    
    public static void main(String [] args) {
        Scanner scan = new Scanner(System.in);
        
        System.out.print("Number of last table: ");
        int lastNum = scan.nextInt();
        System.out.print("Problem digit: ");
        int badDigit = scan.nextInt();
        
        int badTablesCount = 0;
        for ( int i = 1; i <= lastNum; ++i )
            if ( hasDigit(i, badDigit) )
                ++badTablesCount;
        
        System.out.println("Need to remake " + badTablesCount + " tables.");
    }
}

Не по теме:

Только я таблички начиная с 1 считал, а то table #0 как-то по-марсиански звучит...

0
vasyarun
0 / 0 / 0
Регистрация: 20.09.2013
Сообщений: 1
24.09.2013, 10:08 #17
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Main {
    public static void main(String[] args) {
        int count = 0;
        for (int i = 0; i<50000; i++) {
            String str = Integer.toString(i);
            if (str.matches(".*2.*")) {
                count++;
            }
 
 
        }
        System.out.println(count);
 
    }
}
0
REGISTOOOOOO
0 / 0 / 0
Регистрация: 29.06.2015
Сообщений: 1
29.06.2015, 23:31 #18
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static void main(String[] args) {
        int col = 0;
        for (int i = 1; i<=50000; i++){
            int b = i%10;
            int a = (i-b)/10;
            while (a>10){
                int d = a%10;
                a = (a-d)/10;
                if (i==2||b==2||d==2||a==2){
                    col++;
                    break;
                }
            }
        }
        System.out.print(col);
    }
и почему то получилось на 20 единиц меньше правильного ответа
0
Pablito
30.06.2015, 08:46
  #19

Не по теме:

дату темы видел?

0
Alex2105
0 / 0 / 0
Регистрация: 01.01.2015
Сообщений: 4
29.07.2015, 15:23 #20
а так не побывали
Java
1
2
3
4
5
6
7
8
9
10
11
public class PrintTwo {
    public static void main(String[] args) {
        int brak=0;
        for (int i=1; i<50000;i++){
            if (i/100000%10==2 || i/1000%10==2 || i/100%10==2 || i/10%10==2 || i%10==2) {
                brak++;
            }
        }
        System.out.println("Бракованых табличек "+brak);
    }
}
0
xiom
0 / 0 / 0
Регистрация: 14.01.2017
Сообщений: 3
24.12.2017, 17:22 #21
есть хороший вариант решения через рекурсию:
БРАКОВАННЫЕ ТАБЛИЧКИ

вот эта ссылка - там всё подробно объяснено:
https://youtu.be/UJvsh6tGquw
0
КОП
437 / 344 / 102
Регистрация: 15.08.2010
Сообщений: 932
24.12.2017, 23:09 #22
xiom, я бы понял тайминг в целый час, если бы там было общее решение, но его нет...
0
xiom
0 / 0 / 0
Регистрация: 14.01.2017
Сообщений: 3
25.12.2017, 16:57 #23
КОП, на сарказм отвечаю только сарказмом:
- какая задача (существует 50000 различных полок), такое и решение !!!
- а видео учебное, поясняю для тех "кто не понял тайминг в целый час" - то есть для того, чтобы кто-то учился, поэтому первые полчаса о рекурсии, достоинства и недостатки, левосторонняя и правосторонняя, прямой и обратный ходы рекурсии, потом объяснение решения обсуждаемой задачи, на 53 минуте прямо сказано, что это не универсальное решение и указано "куда думать", чтобы сделать универсальным
- так как видео учебное, то оно и подразумевает, что учащимся нужно оставить поле для размышлений (возможно до следующего видео)
- у меня есть универсальное решение через рекурсию и есть измерения, тут пишу примерно (на скрине см. внизу конкретно): у рекурсивного решения количество строчек кода в 2 раза больше, но время исполнения в 1000 раз меньше для числа полок 199999 (не забываем, что рекурсия ограничена: Maximum call stack size exceeded)

- моё рекурсивное решение работает с таким же ответом как у цикла for (см. решения выше) для всех чисел в диапазоне до переполнения стека (сравнения проведены для числа полок от 0 до 199999)
- итак, если у вас нет общего рекурсивного решения, то пересмотрите видео и возьмите указанный там подход за основу:
Javascript
1
2
3
4
5
6
7
8
    function getResultRec(n) {
        if (n==1) {
            return 1;
        }
        else {
            return 1*(Math.pow(10,n-1)) + 9*getResultRec(n-1);
        }
    }
- конкретно в моём коде эта функция употреблена как базовая так:
Javascript
1
2
3
    function getResult(n) {
        return n<2? n: 1*(Math.pow(10,n-1)) + 9*getResult(n-1);
    }
- но вокруг неё есть и "оболочка" вспомогательного кода (тоже рекурсивного)
- на втором скрине методика испытайний
===
- ваше слово, товарищ Маузер © В.В.Маяковский
0
Миниатюры
Подсчитать, сколько ошибочных табличек оказалось в бракованной партии   Подсчитать, сколько ошибочных табличек оказалось в бракованной партии  
КОП
437 / 344 / 102
Регистрация: 15.08.2010
Сообщений: 932
25.12.2017, 19:06 #24
Цитата Сообщение от xiom Посмотреть сообщение
на сарказм
это была скорее плохо сформулированная критика.

Цитата Сообщение от xiom Посмотреть сообщение
какая задача (существует 50000 различных полок), такое и решение !!!
тогда просто System.out.println("23756");
Но это я утрирую, тут вы в общем правы.

Цитата Сообщение от xiom Посмотреть сообщение
- у меня есть универсальное решение через рекурсию и есть измерения, тут пишу примерно (на скрине см. внизу конкретно): у рекурсивного решения количество строчек кода в 2 раза больше, но время исполнения в 1000 раз меньше для числа полок 199999 (не забываем, что рекурсия ограничена: Maximum call stack size exceeded)
- моё рекурсивное решение работает с таким же ответом как у цикла for (см. решения выше) для всех чисел в диапазоне до переполнения стека (сравнения проведены для числа полок от 0 до 199999)
тут я был разочарован, т.к. грубо говоря треть видео это измерения скорости выполнения, но при этом не упоминается самый простой способ без циклов и рекурсий. Хотя может где-то в видео есть намек мол поищите сами
Java
1
2
3
public static int getResult(int n) {
        return (int)Math.pow(10, n) - (int)Math.pow(9, n);
    }
Цитата Сообщение от xiom Посмотреть сообщение
а видео учебное
главное чтоб целевой аудитории было приятно смотреть, мое мнение лишь капля в море, не принимайте близко к сердцу

Отвергая предлагаю:
рекурсию в отдельное видео, вместо пейнта что угодно, но не пейнт.
0
xiom
0 / 0 / 0
Регистрация: 14.01.2017
Сообщений: 3
25.12.2017, 19:15 #25
КОП, спасибо за ответ
Цитата Сообщение от КОП Посмотреть сообщение
не упоминается самый простой способ без циклов и рекурсий
- это было уже четвёртое видео про эту задачу , те кто смотрят - они знают, пятое уже снимать не буду... может быть
- вот ссылка на моё решение: Бракованные таблички
- для спортивного программирования зачастую играет роль не только правильно работающий алгоритм, но и работающий быстро иначе будет TimeLimit и +20 минут штрафа
- спасибо за сотрудничество
0
25.12.2017, 19:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2017, 19:15
Привет! Вот еще темы с ответами:

Составить программу, которая вычисляет, сколько всего зёрен оказалось на шахматной доске - C++
3. На первую клетку шахматной доски положили 1 зерно, а на каждую следующую клетку на n зёрен больше, чем на предыдущую. Составьте...

Определить, сколько граммов соли оказалось бы в наперстке воды объемом 2 см3, зачерпнутой из озера - Pascal ABC
В озеро, имеющее среднюю глубину L м и площадь поверхности S кв.км, бросили кристалл поваренной соли массой 0,05 г. Сколько граммов соли...

Определить, сколько надо долить жидкости в каждый из стаканов, чтобы суммарно в них оказалось N мл - Pascal ABC
При решении задачи не используйте строковых или символьных переменных и циклов. Задачу необходимо решить используя ветвления, числовые типы...

Определить, сколько граммов соли оказалось бы в наперстке воды объемом 2 см3, зачерпнутой из озера - Pascal ABC
В озеро, имеющее среднюю глубину L м и площадь поверхности S кв.км, бросили кристалл поваренной соли массой 0,05 г. Сколько граммов соли...


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru