Дистанционная подготовка: Задача №1517. Сумма квадратов
Задача №1517. Сумма квадратов
от Максим Шишкин - Вторник 20 Май 2014, 19:28
1517. Сумма квадратов
  Решил так

import java.io.*;

    public class prosto {
   
      public static void main (String args[]) throws FileNotFoundException,IOException {
     
          BufferedReader reader = new BufferedReader(new FileReader("stdin.txt"));


   
            String str1;
           
          str1=reader.readLine();
     
          reader.close();
         
          int n = new Integer(str1);
      double h = n;
          int i,j;
       
          for (i=1;i<Math.sqrt(h);i++){
         
          for (j=1;j<Math.sqrt(h);j++){
         
              if (i*i+j*j == n ) {
             
              PrintWriter writer = new PrintWriter(new FileWriter("stdout.txt"));
              writer.println("YES\n"+(i) + " " + (j));
              writer.close();
              return;
              }
           
             
              }
         
          }
         
              PrintWriter writer = new PrintWriter(new FileWriter("stdout.txt"));
              writer.println("NO");
                  writer.close();
         
      }
    }

Два вопроса. Почему те тесты, что проходят вызывают ошибку? Это может быть лишь в том случае если путь к файлу указан неправильно. Я пробовал
и stdout.txt и stdout и output.txt.
Второй есть какой-то другой способ кроме перебора?
Re: Задача №1517. Сумма квадратов
от Григорий Резников - Среда 21 Май 2014, 09:55
  1) Сделайте ввод-вывод,как тут http://informatics.mccme.ru/mod/resource/view.php?id=210
(Извините,если это бред, просто никогда на Яве не писал)

2) Совсем без перебора тут не получится, но его можно оптимизировать.
Давайте просто переберем i от 0(а не от 1 как у вас) до корня из n. Тогда из формулы i^2+j^2=n j однозначно определяется через n и i как j=sqrt(n-i*i).
Остается проверить целое ли j. Если да, то i,j и будет ответом. Если цикл завершился до конца, то ответа нет.

Работает за корень от n.