Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Есть два числа. Нужно найти все числа между ними, Случайным образом! 
:(
    Опции темы
Mayk
Дата 26.11.2005, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 2
Всего: 134



Цитата(sergej @ 27.11.2005, 02:28)
Mayk из того, что перемешивание закрыли в функцию, не следует, что там нет переборки массива.

Она там есть. Только там делается наоборот:
Там i-ый элемент(i пробегает от begin до end) swap'ается со случайным,
а не случайный с j-ым (j пробегает от end до begin). smile

Цитата(sergej @ 27.11.2005, 02:28)
Это STL, как я понимаю?

Угу

Цитата(sergej @ 27.11.2005, 02:28)
Из того, что ктото подумал над решением задачи, не следует, что не обязательно подумать ещё раз.

Просто когда знаешь решение, думать уже не хочется smile
Подобная тема, кстати, была когда-то в c++.
-- добавлю в ручную чтоб тему не апать --
Цитата(sergej @ 27.11.2005, 02:28)
Если учесть, что это полная программа.

Ну я бы вообще так делал
Код

#include <algorithm>
#include <iostream>
#include <iterator>
using namespace std;
int main(){
 int min=90,max=100,interval=max-min;
 int * pool = new int[interval];
 for(int i=0;i<interval;pool[i]=min+i++);
 random_shuffle(pool, pool+interval);
 copy(pool,pool+interval, ostream_iterator<int>(cout, endl));
 delete[] pool;
}

Таким образом код сокращаем до 4 строк (от new и до delete если считать без delete'а), вместо 6. 33% строк выкинули благодаря стандартной либе smile

Это сообщение отредактировал(а) Mayk - 26.11.2005, 23:04


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Denis-delphist
Дата 27.11.2005, 09:28 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











cardinal
Я просто сделал задачю интереснее. Разве тебе не интерестно, как профессионалу решить задачу потруднее???
  Вверх
GIK
Дата 27.11.2005, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: нет
Всего: 14



А если просто создать массив из чисел [min++] длинной в разницу.
Код

var mas = new Array();
var min=100;
var max=200;
var r=max-min;
 for (var i=0; i<r; i++)
{ mas [i]=min++; //инкремент с минимума и присвоение итога еллементу массива
 } 

Или я не понял вопроса про генерацию числа???
А может тема довно закрыта smile

Добавлено @ 11:43
Ой, я кажется не вовремя и не с тем примером smile


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
eskaflone
Дата 27.11.2005, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 5.11.2005

Репутация: нет
Всего: 3



sergej.z

в посте wowa не заметил одной строчки :
Код

                     pool[ind]=pool[interval-1]; //последнее число на место "изъятого"

теперь все понятно.
PM MAIL   Вверх
sergejzr
Дата 27.11.2005, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 4
Всего: 360



Mayk, ГЫ smile
Разница там небольшая! вот например то же в 12 строк smile)))

Код

#include "iostream.h"
int main(){ 
 int min=90,100,interval=max-min;
 int * pool = new int[interval]; 
 for(int i=0;i<interval;pool[i]=i,i++);
 for(interval--;interval>0;interval--){
   int ind=(rand()*time(0))%interval;
   cout<<min+pool[ind]<<" "<<endl;
   pool[ind]=pool[interval-1];    
 }
 delete [] pool;
}

Вообще можно извратится ещё короче, но ИМХО уже лишнее.

Есть несколько нюансов на которые я ориентируюсь при ответе.
  1. любую программу можно написать в две строки
    Код

    #include "myLib.h"
    execMyProgramm(myArguments); 

    Из за этого она оптически короче, но на деле возможно тормознутее и запутаннее. То есть сравнивать длинну кода таким образом нельзя. Ещё любую программу можно записать в одну строку.
  2. Не всегда стоит подключать библиотеки. Маленькие задачи часто лучше решать вручную, заодно тренировка. Другое дело, если они уже подключены.
  3. Алгоритмы можно использовать в разных языках программирования, в то время как код - нет..
  4. Если задают такое задание, то в основном не для того, чтобы проверить, насколько хорошо человек знает различные либы



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Dov
Дата 4.12.2005, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: нет
Всего: 88



Цитата(sergej @ 26.11.2005, 22:28)
#include "iostream.h"
int main()
{
   
int min=90;
int max=100;
int interval=max-min;
int * pool = new int[interval];
 
for(int i=0;i<interval;pool[i]=i,i++);
for(interval--;interval>0;interval--)
{
  int ind=(rand()*time(0))%interval;
  cout<<min+pool[ind]<<" "<<endl;
  pool[ind]=pool[interval-1];   
}
  return 0;
}
Имхо, классный алгоритм. Пару лет назад мне понадобилась такая штука, но кроме перебора всего массива я ничего не придумал.
sergej.z, молодец. smile


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0500 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.