Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Японская задача о остатках


Автор: eag1e 23.1.2007, 21:04
Есть такая задача:
Даны делители и остатки .. нужно найти число при делении которого на делители получались бы остатки которые даны в условии.
Можно ли этот код как нибудь упростить. Мне не нравится "... & ... & ...".

Код

class cicles 
{
    public static void main(String[] args) 
    {
        int x[] = {13,9,5};
        int y[] = {6,5,3};
        for (int i = 0; i < 1000; i++) 
        {
            if (i % x[0] == y[0] & i % x[1] == y[1] & i % x[2] == y[2]) 
            {
                System.out.println("Num : " + i);
            }
        }
    }
}



Автор: w1nd 24.1.2007, 00:46
Код
    for (int i = 0; i < 1000; i++) {
        for (int j = 0; j < 3; j++) {
            if (i % x[j] == y[j]) {
                System.out.printf("Dividend for (x / %d = y + %d) is %d\n", x[j], y[j], i);
            }
        }
    }

Автор: eag1e 24.1.2007, 05:17
Вы не поняли условия ... в моей программе ищутся значения удовлетворяющие всем делителям а не каждому по отдельности ... то есть: 

x % 13 = 6
x % 9 = 5
x % 5 = 3

Найти "x".

ЗЫ. И еще как понимать такое поведение Eclipse на 
Цитата
 System.out.printf  


Цитата

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    The method printf(String, Object[]) in the type PrintStream is not applicable for the arguments (String, int, int, int)

    at cicles.main(cicles.java:10)


В NetBeans, что интересно, всё прекрасно компилируется и работает.

Автор: Ivan Kolesnikov 24.1.2007, 07:49
Упростить можно примерно так:
Код

class cicles 
{
    public static void main(String[] args) 
    {
        int x[] = {13,9,5};
        int y[] = {6,5,3};
        for (int i = 0; i < 1000; i++) 
        {
          boolean ans = true;
          for (int j=0; j<x.length && ans; j++)
            ans = i % x[j] == y[j];
          if (ans)
          {
              System.out.println("Num : " + i);
          }
        }
    }
}


Компилировать не пробовал, может есть небольшие опечатки.

А вообще ты не путаешь, если мне не изменяет память это "Китайская теорема об остатках", а не японская. А если например взяли число порядка 100000, и всего насчитали 1000 остатков, очень долго будет работать алгоритм который ты здесь привел. Сдесь приведен более быстрый алгоритм http://algolist.manual.ru/maths/teornum/crt.php.

Автор: scai 24.1.2007, 09:51
китайская. ага.  

Автор: LSD 24.1.2007, 11:53
Цитата(eag1e @  24.1.2007,  05:17 Найти цитируемый пост)
ЗЫ. И еще как понимать такое поведение Eclipse на
...

Какой Compiler compliance level и Source compatibility стоит у проекта (должно быть 1.5)?

Автор: eag1e 24.1.2007, 15:31
Всем спасибо. Теорема действительно китайская ... пардон smile ...

Цитата
Compiler compliance level
 и 
Цитата
Source compatibility
 стояли 1.2
Поставил 5.0 (можно поставить 6.0, но понял что пока рановато.) - всё ок ... зачем же Eclipse выставляет по умолчанию 1.2 ? ... Eclipse ver. 3.2.0.

Автор: LSD 24.1.2007, 15:35
Цитата(eag1e @  24.1.2007,  15:31 Найти цитируемый пост)
Поставил 5.0 (можно поставить 6.0, но понял что пока рановато.) - всё ок ... зачем же Eclipse выставляет по умолчанию 1.2 ?

На всякий случай, вдруг у тебя старая JDK стоит.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)