IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Задачка из темы множества
Markson
сообщение 21.04.2009 23:23
Сообщение #1





Группа: Пользователи
Сообщений: 8
Пол: Мужской

Репутация: -  0  +


Вот задачка, как зделать в масивах я примерно знаю, но мне нада её решыть с помощью множыств ( на украинском "множин"), с етим методом я никак немогу разобратся. На форуме вродебы ничего похожего ненаходил.


В порядке спадания напечатать все целые числа из диапазона 1..100 которые можно подати в виде sqr(n)+2*sqr(k) , где n,k целые числа.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 22.04.2009 8:59
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


var
i,n,k : Integer;
a : Set of Byte;
begin
a:=[];
readln(n,k);
for i:=1 to 100 do
begin
if i=sqr(n)+2*sqr(k) then
include(a,i);
end;
for i:=1 to 100 do
begin
if i in a then
Write(i,' ');
end;
readln;
end.

Не знаю что такое "спадания " сам реализуешь
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 22.04.2009 11:06
Сообщение #3


Гость






Не совсем так.. Выражение "числа можно представить в виде" означет, что нужно найти все n и k, удовлетворяющие условию. Так что как-то примерно так:
var
i,n,k : Integer;
a : Set of Byte;
begin
a:=[];
for i:=1 to 100 do for n:=0 to 100 do for k:=1 to 100 do
if i=sqr(n)+2*sqr(k) then include(a,i);
for i:=100 downto 100 do if i in a then Write(i,' ');
readln;
end.

Цитата(Ozzя @ 22.04.2009 8:59) *
Не знаю что такое "спадания " сам реализуешь
Думаю, это значит в порядке убывания (сделал)
 К началу страницы 
+ Ответить 
volvo
сообщение 22.04.2009 11:17
Сообщение #4


Гость






Непонятно только, зачем делать заведомо лишнюю работу: как только n или k превысит 10, сумма n2+2*k2 превысит 100, так что циклы по N и K можно ограничить 10-ю... А по i вообще убрать:

  for n := 0 to 10 do
for k := 1 to 10 do begin
i := n*n + 2*k*k;
if i <= 100 then include(a, i);
end;
for i := 100 downto 1 do if i in a then Write(i: 4);
 К началу страницы 
+ Ответить 
Lapp
сообщение 23.04.2009 3:59
Сообщение #5


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(volvo @ 22.04.2009 12:17) *
Непонятно только, зачем делать заведомо лишнюю работу: как только n или k превысит 10, сумма n2+2*k2 превысит 100, так что циклы по N и K можно ограничить 10-ю... А по i вообще убрать:
Совершенно согласен, я явно перестраховался smile.gif. Но, volvo, ты зря выкинул ноль из второго цикла - формула несимметричная относительно n и k. Число 25, например, удовлетворяет условию (52+2*02), а твое решение его не найдет. На n и k не накладывается никаких ограничений, кроме целости, так что по идее в цикл должны войти и отрицательные числа - но их мы отбрасываем, поскольку их квадраты равны квадратам положительных. Ноль же отбросить нельзя smile.gif.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 21.06.2025 19:34
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"