Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 8

Нахождения Числа-палиндром

11.01.2013, 21:52. Показов 5128. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят, помогите разобраться с проблемой пожалуйста. В общем, написал я код для нахождения Числа-палиндром при умножении двухзначного числа, который работает правильно, но:

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
78
79
public class Problem4 {
 
    
    public static void main(String[] args) {
        
        // variables declar.
        int cache; 
        String cache2; 
        [COLOR="Red"]int num = 100;[/COLOR]
        boolean p;
        
        Problem4 p4 = new Problem4();
        
        
        char [] array;
        char [] sorted;
        
        
    for(int i = 1; i < [COLOR="Red"]num[/COLOR]; i++){ 
        
        
            for(int j = i+1; j <= [COLOR="Red"]num[/COLOR]; j++){ 
                cache = 0;   // restore cache number
                cache = i * j; 
                cache2 = Integer.toString(cache);  // transform integer(cache) to String
                array = new char[cache2.length()]; // the size of the array equals to the size of the number(cache2)
                sorted = new char[cache2.length()];
                
                     
                for(int k = 0; k < cache2.length(); k ++){  // nested loop, filling out the arrays
                    
                    array[k] = cache2.charAt(k);  // original array
                    sorted[k] = cache2.charAt(k); // will be sorted array
                
                } // for k
                
                p = p4.checker(array, sorted); // start the checher method to sort the array and compare it with original
                if (p == true )  // if array the same as sorted than printing out the cache number
                    System.out.print(cache + " ");
                            
                    
                
            } // for j
        } // for i 
 
        
    } // end of main
 
private boolean checker(char [] array, char [] sorted){
    boolean checker = false; 
    boolean flag = true; // flag for selective sorting 
    int j = 0;
    char cache; 
    
    while(flag) {
        flag = false;
    j++; 
    for(int i = 0; i < sorted.length - j; i ++){
        if(sorted[i] != sorted.length - j) {
        cache = sorted[i]; // save the number at the position i
        sorted[i] = sorted[i+1]; // exchange previous number with the next
        sorted[i + 1] = cache; // restore cache number to the next position
        flag = true; // determine if more steps available to sort the array 
        } // if
        
    } // for 
    } // while  // in the end sorted array will look opposite of the original array: array = 1234, sorted = 4321;
    
    for(int i = 0; i < array.length; i ++){
        if(Arrays.equals(array, sorted))  // simply compares two arrays
            checker = true;
        else checker = false;
        
    }
    
    return checker;
}
 
} // end of class
Дело в том что если нужно найти Число-палиндром при умножении трехзначных чисел, то код не работает. Т.е. он запускается, но на экран ничего не выводится. В коде для этой операции я просто меняю диапазон для for loop от 100 до 999:
for(int i = 100; i < 999; i++){
for(int j = i+1; j <= 999; j++){

Помогите разобраться пожалуйста в чем, собственно, проблема, ибо я ее не вижу совсем =(

Спасибо за внимание.

P.S. Извиняюсь, если не в тот раздел закинул эту тему....
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.01.2013, 21:52
Ответы с готовыми решениями:

Найти числа, не превосходящие заданного числа N, двоичная запись которых представляет палиндром
Здравствуйте, посетители и программеры... нужна помощь в решении 2 задач... Задание 1. Найти все такие простые числа, не...

Палиндром числа
Здравствуйте. Подскажите , правильно ли я сделал процедуру палиндром? procedure palindrom(x:integer;var f:boolean); begin c:=0; ...

Палиндром числа
Любое число, например 23, если его перевернуть(32) в сумме с перевёрнутым даёт палиндром(23+32=55). Но не всегда получается такой трюк с...

11
Эксперт функциональных языков программированияЭксперт по математике/физике
4310 / 2102 / 431
Регистрация: 19.07.2009
Сообщений: 3,187
Записей в блоге: 24
12.01.2013, 02:12
Долго пытался понять код, но остановился на одном цикле и вообще не понимаю, что там происходит:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    while(flag) {
    
        flag = false;
        j++; // содержание этой переменной?
        for(int i = 0; i < sorted.length - j; i ++){
            if(sorted[i] != sorted.length - j) { // в чём смысл этого условия?
                cache = sorted[i];
                sorted[i] = sorted[i+1];
                sorted[i + 1] = cache;
                // Это обычный обмен sorted[i] и sorted[i+1]
                flag = true; // determine if more steps available to sort the array 
            } // if
        
        } // for 
    } // while  // in the end sorted array will look opposite of the original array: array = 1234, sorted = 4321;
Что делает этот цикл (в двух словах) и почему он делает имеено то, что он делает?
В коде написано: «in the end sorted array will look opposite of the original array: array = 1234, sorted = 4321;». Прошу эту фразу объяснить детальнее.
Кроме того, мы знаем, что array и sorted равны почленно (т.к. равны cache2).
0
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 8
12.01.2013, 03:15  [ТС]
Цитата Сообщение от Mysterious Light Посмотреть сообщение
Долго пытался понять код, но остановился на одном цикле и вообще не понимаю, что там происходит:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    while(flag) {
    
        flag = false;
        j++; // содержание этой переменной?
        for(int i = 0; i < sorted.length - j; i ++){
            if(sorted[i] != sorted.length - j) { // в чём смысл этого условия?
                cache = sorted[i];
                sorted[i] = sorted[i+1];
                sorted[i + 1] = cache;
                // Это обычный обмен sorted[i] и sorted[i+1]
                flag = true; // determine if more steps available to sort the array 
            } // if
        
        } // for 
    } // while  // in the end sorted array will look opposite of the original array: array = 1234, sorted = 4321;
Что делает этот цикл (в двух словах) и почему он делает имеено то, что он делает?
В коде написано: «in the end sorted array will look opposite of the original array: array = 1234, sorted = 4321;». Прошу эту фразу объяснить детальнее.
Кроме того, мы знаем, что array и sorted равны почленно (т.к. равны cache2).
Это тип сортирования массива... я не в курсе как оно по русски, извиняюсь за это, но на англ это Bubble Sorting. В общем просто сортирую массив задом на перед: если был массив заполнен таким образом: 1 2 3 4 5. то с помощью этого кода\сортинга он станет таким: 5 4 3 2 1.
переменная j сдвигает границу с конца массива к началу после каждого шага. Это условие if(sorted[i] != sorted.length - j) сдвигает курсор\число от начало до конца массива, грубо говоря. Т.е. в массиве 1 2 3 4 5 он в первом шаге сдвигает 1 на место 5. на втором шаге граница уменьшится и "курсор" начнет двигаться со второй позиции массива...
Вот пример со стороннего сайта данного цикла: http://mathbits.com/MathBits/J... Bubble.htm

Как-то так наверное...

P.S. Я изучать программирование начал только месяца четыре назад, так что извиняюсь если код не красиво написан.
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4310 / 2102 / 431
Регистрация: 19.07.2009
Сообщений: 3,187
Записей в блоге: 24
12.01.2013, 03:45
Я, видимо, жестко туплю, но не понимаю, что именно и как делает этот цикл.
Массив {1,3,2,4} преобразовывается в {4,2,3,1}
{10,30,20,40} — в {40,20,30,10}
То есть с одной стороны массив sorted просто переворачивается, как если бы было написано:
Java
1
2
3
4
5
for(int i=0;2*i<sorted.length;++i) {
    cache = sorted[i];
    sorted[i] = sorted[sorted.length-i];
    sorted[sorted.length-i] = cache;
}
С другой стороны, совершенно не понятно необходимость условия if(sorted[i] != sorted.length - j) : это как сравнение удавов и попугаев, sorted[i] может быть чем угодно (char/int/long/ любой Comparable тип) по логике задачи, а sorted.length-j указывает на индекс, эти величины по происхождению разные. Это как сравнивать рост человека в сантиметрах и его номер партбилета.

А ещё я не углядел в этом коде bubble sort: не вижу, по какому критерию сравниваются соседние объекты, не понимаю, зачем по задаче нужно что-то сортировать.
0
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 8
12.01.2013, 04:20  [ТС]
Цитата Сообщение от Mysterious Light Посмотреть сообщение
Я, видимо, жестко туплю, но не понимаю, что именно и как делает этот цикл.
Массив {1,3,2,4} преобразовывается в {4,2,3,1}
{10,30,20,40} — в {40,20,30,10}
То есть с одной стороны массив sorted просто переворачивается, как если бы было написано:
Java
1
2
3
4
5
for(int i=0;2*i<sorted.length;++i) {
    cache = sorted[i];
    sorted[i] = sorted[sorted.length-i];
    sorted[sorted.length-i] = cache;
}
С другой стороны, совершенно не понятно необходимость условия if(sorted[i] != sorted.length - j) : это как сравнение удавов и попугаев, sorted[i] может быть чем угодно (char/int/long/ любой Comparable тип) по логике задачи, а sorted.length-j указывает на индекс, эти величины по происхождению разные. Это как сравнивать рост человека в сантиметрах и его номер партбилета.

А ещё я не углядел в этом коде bubble sort: не вижу, по какому критерию сравниваются соседние объекты, не понимаю, зачем по задаче нужно что-то сортировать.
Я сейчас смотрю на этот if(sorted[i] != sorted.length - j) и думаю как объяснить для чего он, ибо и без него по сути работать будет так же, на сколько я понимаю...
В общем вот такой вот ход мыслей у меня по данной задаче: умножаю число, к примеру 91*98 = 8919. Данное число представляю в виде стринга и каждую цифру записываю в массив array и sorted. Так array и sorted состоят из {8, 9, 1, 8}. дальше в методе checker начинается сортировка sorted задом на перед... {8, 1, 9, 8}. Дальше сравниваем array и sorted и получаем ответ что они не равны, отправляем false. т.е. число 8918 не есть число-палиндром. Но: 91*99 = 9009. проделоваем ту же операцию и в итоге получим array = { 9, 0, 0, 9 } и sorted после сортировке получится = {9, 0, 0, 9}. Сверяем массивы и получаем ответ true, т.е. число 9009 полученное при умножении 91 на 99 есть число-палиндром....
Вот для этого я и использую сортировку массива...
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4310 / 2102 / 431
Регистрация: 19.07.2009
Сообщений: 3,187
Записей в блоге: 24
12.01.2013, 05:06
Посмотрите эти методы
http://ideone.com/SEMYHa
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
import java.util.Arrays;
 
class Main
{
  public static void main (String[] args)
  {
     System.out.print(isPolynom(132));
  }
  
  private static char[] перевёртыш(char[] x) {
    int t = x.length;
    char[] y = new char[t];
    for(int a=0; a<t; ++a)
      y[t-a-1]=x[a];
    return y;
  }
  
  private static boolean isPolynom(char[] x) {
    return Arrays.equals(x,перевёртыш(x));
  }
  
  private static boolean isPolynom(int x) {
    String c = Integer.toString(x);
    int t = c.length();
    char[] a = new char[t];
    for(int k = 0; k < t; k ++)
      a[k] = c.charAt(k);
    return isPolynom(a);
  }
  
}


Я по-прежнему не понимаю, что значит фраза «отсортировать массив» в Ваших сообщениях. Массив {9,0,0,9} не является отсортированным ни в каком смысле. А для того, чтоб перевернуть массив два вложенных цикла не нужно.
1
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 8
12.01.2013, 08:26  [ТС]
Я изменил свой код на ваш по Перевертыванию массива, но проблема оказалась та же...
По какой причине for не хочет работать от 100 до 999 ?

Код
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
public class Problem4 {
 
    public static void main(String[] args) {
 
        // variables declar.
        int cache;
        String cache2;
        int num = 999;
        boolean p;
 
        Problem4 p4 = new Problem4();
 
        char[] array;
        char[] sorted;
 
                    for (int i = 100; i < num; i++) {
 
            for (int j = i + 1; j <= num; j++) {
                cache = 0; // restore cache number
                cache = i * j;
                cache2 = Integer.toString(cache); // transform integer(cache) to
                                                    // String
                array = new char[cache2.length()]; // the size of the array
                                                    // equals to the size of the
                                                    // number(cache2)
                sorted = new char[cache2.length()];
 
                for (int k = 0; k < cache2.length(); k++) { // nested loop,
                                                            // filling out the
                                                            // arrays
 
                    array[k] = cache2.charAt(k); // original array
                    sorted[k] = cache2.charAt(k); // will be sorted array
 
                } // for k
 
                p = p4.checker(array, sorted); // start the checher method to
                                                // sort the array and compare it
                                                // with original
                if (p == true) // if array the same as sorted than printing out
                                // the cache number
                    System.out.print(cache + " ");
 
            } // for j
        } // for i
 
    } // end of main
 
    private boolean checker(char[] array, char[] sorted) {
        boolean checker = false;
        int size = array.length;
 
        for (int i = 0; i < size; i++)
            sorted[size - i - 1] = array[i];
 
 
        for (int i = 0; i < array.length; i++) {
            if (Arrays.equals(array, sorted)) // compares two arrays
                checker = true;
            else
                checker = false;
 
        }
 
        return checker;
    }
 
} // end of class


Добавлено через 51 минуту
Это я не правильное слово выбрал... массив вида 9 0 0 9 конечно же не сортированный... "Перевернуть" описывает данную операцию наиболее точно.
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4310 / 2102 / 431
Регистрация: 19.07.2009
Сообщений: 3,187
Записей в блоге: 24
12.01.2013, 09:03
ИМХО, работает (http://ideone.com/jDTi7C)
1
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 8
12.01.2013, 10:05  [ТС]
хм... тогда все понятно..
eclips не в состоянии вывести столько информации в одну строку "System.out.print(cache + " ");"
поменял на println и все заработало...

Спасибо.
0
 Аватар для Drygba
512 / 454 / 119
Регистрация: 17.02.2012
Сообщений: 1,032
Записей в блоге: 1
12.01.2013, 12:57
Цитата Сообщение от escorp Посмотреть сообщение
нахождения Числа-палиндром при умножении двухзначного числа
всуну свои пять копеек, при умножении на что?

Добавлено через 18 минут
и зачем все остальные телодвижения если палиндром находится
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Palindrom{
    public static void main(String[] arg){
        Scanner sc = new Scanner(System.in);
        System.out.println("Введите число для проверки");
        int i = sc.nextInt();
        if (String.valueOf(i).equals(new StringBuilder(String.valueOf(i)).reverse().toString())){
            System.out.println("Число палиндром");
        }
        else{
            System.out.println("число не палиндром");
        }
        sc.close();
    }
}
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4310 / 2102 / 431
Регистрация: 19.07.2009
Сообщений: 3,187
Записей в блоге: 24
12.01.2013, 15:13
Цитата Сообщение от Drygba Посмотреть сообщение
и зачем все остальные телодвижения если палиндром находится
Цитата Сообщение от escorp Посмотреть сообщение
Я изучать программирование начал только месяца четыре назад, так что извиняюсь если код не красиво написан.
Ещё можно было много решенных задач нагуглить, в том числе и на этом форуме, по запросу «палиндром Java».
Но, как я понял, ТС желаем самостоятельно решить задачу. И что характерно, он (по его словам) таки её решил, используя для переворота массива два вложенных цикла. Так-то.
0
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 8
12.01.2013, 23:32  [ТС]
Цитата Сообщение от Drygba Посмотреть сообщение
и зачем все остальные телодвижения если палиндром находится
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Palindrom{
    public static void main(String[] arg){
        Scanner sc = new Scanner(System.in);
        System.out.println("Введите число для проверки");
        int i = sc.nextInt();
        if (String.valueOf(i).equals(new StringBuilder(String.valueOf(i)).reverse().toString())){
            System.out.println("Число палиндром");
        }
        else{
            System.out.println("число не палиндром");
        }
        sc.close();
    }
}

Как бы я упомянул в начале что я НАЧИНАЮЩИЙ в программировании... таких вещей как "new StringBuilder" и "reverse()" да и в целом вся запись (new StringBuilder(String.valueOf(i)).reverse ().toString())) мне понятна только теоретически, на практики не использовал, именно в таком виде(valueOf(i) и toString() и .equals ясное дело понятны, но в такой комбинации еще не приходилось использовать)....

и зачем все остальные телодвижения если палиндром находится
Условие задачи такое было. Найти палиндром при умножении двухзначного числа, а потом при умножении трехзначного. Для этого и был сделан массив.

Добавлено через 10 минут
Цитата Сообщение от Mysterious Light Посмотреть сообщение
Ещё можно было много решенных задач нагуглить, в том числе и на этом форуме, по запросу «палиндром Java».
Но, как я понял, ТС желаем самостоятельно решить задачу. И что характерно, он (по его словам) таки её решил, используя для переворота массива два вложенных цикла. Так-то.
Вопрос мой видели?
Задачу я решил при первом условии: найти палиндром при умножении двухзначного числа.
Но при использовании трехзначных чисел, eclipse не выводил ничего на экран.
Думал что проблема в коде, по этому и решил спросить... как оказалось код работает правильно, дело было в System.out.print который в строчку не смог вывести большое количество чисел. Нужно было поменять на println.

Я не совсем понимаю ваше "недовольство" и что вы хотите доказать мне или кому-то другому. Хотел бы гуглить само решение - здесь бы вопросов не задавал бы.

В любом случае спасибо за ваш вариант кода. Он очевидно проще чем мой, но к сожалению я еще не "дорос" до таких способов..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.01.2013, 23:32
Помогаю со студенческими работами здесь

Палиндром числа
Приветствую, форумчане. Нужна ваша помощь: Дано четырехзначное число, написать метод проверки, если число четное, то вывести его...

Определить процедуру нахождения числа гласных букв в слове и применить её для нахождения числа гласных букв в каждом слове заданного предложения
У меня проблема с нахождением гласных букв: Определить процедуру нахождения числа гласных букв в слове и применить её для нахождения...

Проверка числа на палиндром
Добрый день! Есть задание с использованием условного оператора if. Составить программу проверки, является ли заданное трехзначное...

Палиндром записи числа в 16-ричной системе счисления
Среди всех четырехзначных чисел найти числа, запись которых в 16-р системе исчисления представляет собой палиндром, и подсчитать количество...

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru