Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Общие темы > Загадки

Загадки Постим и отгадываем загадки. Флуд запрещён - только условия и обсуждение решений.

Ответ
 
Опции темы
Старый 17.03.2011, 14:55   #1
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Задачка на математику и логику.

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

В общем т.к. это делается на форуме, задачка на честность - использовать средства разработки - нельзя. Пишите псевдокод сразу тут но обязательно оберните в тег "оффтоп".
Затем чтобы те кто заинтересуются задачкой, не смотрели на чужой результат прежде чем начинать свой.

Правила:
1. Писать пседво-код решения задачки в теге OFFTOP.
2. Использовать компиляторы или калькуляторы не разрешается, будьте честными для собственного спортивного интереса.
3. Проверять конечный результат в компиляторе не разрешается. Тут важен поток мысли и идеи, а не сам результат, т.к. естественно в нормальных условиях будет проверено. Если не допустите сильных логических и математических ошибок - плюс, но не сильно влияет на саму суть теста.

Задача:
Объявить двумерный массив m[x,y], размерностью 5x5.
Заполнить массив m числами делимыми на 5, от 5 до 100 (включая) (пример: 5, 10,15 ... 85, 90, ...) в массив пробегаясь по x и y последовательно. Пример: (i1 - m[1,1], i2 - m[1,2], ... , i8 - m[2,3], ...) (in - итерации).
Вывезти на экран координату в массиве (x,y) по которым в массиве m будет одно из чисел: 20, 40, 60, 80, 100. В такой форме: "m[x,y] = a" (заменить x,y на координаты, и a на число которое соответствует запрашиваемым).

Ожидаемый результат на экране:
m[0,3] = 20
m[1,2] = 40
m[2,1] = 60
m[3,0] = 80
m[3,4] = 100
Соблюдайте правила
Потом можно будет вместе разобрать варианты ответов и описать ошибки, ошибки "приветствуются"

Последний раз редактировалось moka, 17.03.2011 в 18:39.
(Offline)
 
Ответить с цитированием
Старый 17.03.2011, 17:17   #2
FireOwl
Бывалый
 
Аватар для FireOwl
 
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений
(для 1,836 пользователей)
Ответ: Задачка на математику и логику.

Язык не важен?

// Мне немного трудно перестроиться на другой язык, пишу на C#
int m[,]=new m[5,5];
int x;
for(int c=0;c<25;c++){
m[c%5][c/5]=(c+1)*5;
}
x=Сonvert.ToInt32(Concole.Read()); // Не помню правильный синтаксис.
Console.WriteLine("m[{0},{1}]={2}",((x/5)-1)%5,((x/5)-1)/5,x);
__________________
N"Gasta! Kvata! Kvakis!
Ahkstas so novajxletero (oix jhemile) so Ranetauw.
(Offline)
 
Ответить с цитированием
Старый 17.03.2011, 18:38   #3
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Задачка на математику и логику.

FireOwl, можно писать на чём угодно.

Вот немного комментариев по задаче и коду, моё имхо:
Задача видимо не совсем понята правильно, суть в чём:
Создаётся массив 5,5 (у тебя это есть), далее заполняется числами от 5 до 100. Заполнение есть, то что оно выходит за радиус 100 - не обговаривалось в задаче, поэтому то что ты заполнил до 125 - не проблема.
Далее идёт чтение номера, получается в коде ты получаешь номер, и далее находишь по числу (значение в массиве) индекс. По идее верно, с одним условием, что если мы изменим массив немного, получится что вычисления не будут корректными, т.к. подразумевается что массив всегда соответствует тому что был создан (условно "статичен").
Только первая часть задания была выполнена.
Но также, исходя из задачи, чередование было сперва по y затем x, в твоём решении наоборот, хотя результат от этого не меняется, лишь "логика" хранения данных, что порой может сбивать с толку.
Вторая часть задания не совсем была понята корректно, для ясности я внёс в первый пост пример вывода, который должен получиться.

Насчёт деталей. Они правда в основном на внимательность, и средство разработки поправит чаще всего, но всё же прокомментирую:
Двумерный массив объявляется так:
int[,] m = new int[5,5];
Остальное весьма корректно.

По идее всё более менее конечно, если быть не грубым, но такой подход цикла не совсем корректен с математической и логической точки зрения, т.к. основывается на определённых условиях задания, это относится к числу 25 - как ограничение в цикле, что было тобою вычислено исходя из количества элементов в массиве и длине шага (5), 5*5 = 25 - столько элементов, в задании было сказано от 5 до 100. Как уже говорил не столь важно от части. Но при изменении размера массива, придётся пере вычислять его размер, и т.п. хотя в более корректном варианте всё равно будет тоже зависимость от количества элементов.

А так весьма неплохое начало.

имхо


ЗЫ, тоже на C# пишу, нравится язык и инструментарий.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
FireOwl (17.03.2011)
Старый 17.03.2011, 21:01   #4
ffinder
Дэвелопер
 
Аватар для ffinder
 
Регистрация: 10.09.2007
Сообщений: 1,442
Написано 793 полезных сообщений
(для 1,460 пользователей)
Ответ: Задачка на математику и логику.

Сообщение от MoKa Посмотреть сообщение
В общем, т.к. у нас в компании я второй по должности...
использовать средства разработки - нельзя.
страшно представить что ты будешь вытворять, когда дорвешься до собеседований..."эффект вахтера" в действии.
задачку не читал, похожа на "школьную" херню.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Dream (17.03.2011)
Старый 17.03.2011, 21:06   #5
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Задачка на математику и логику.

Сообщение от ffinder Посмотреть сообщение
страшно представить что ты будешь вытворять, когда дорвешься до собеседований..."эффект вахтера" в действии.
задачку не читал, похожа на "школьную" херню.
Поясни что такое "эффект вахтера" в твоём понятии?
К чему вообще комментарий? Типо, делать нечего, но чёт делать нада, мол фигня для тебя, дык, давай своё решение тогда.
Если тебе не ясна суть анализа и ты не имеешь никакого понятия в анализе человеческого мышления в отдельных направлениях, то конечно, для тебя не будет иметь никакого значения такая задачка. Если ты читал внимательно начало, то понял что эта задачка для собеседования, и весьма популярна. И самое интересное, с ней мало кто достойно справляется, а половина вообще ахинею пишет. Это идёт речь о коммерчески опытных разработчиках!..
(Offline)
 
Ответить с цитированием
Старый 17.03.2011, 21:10   #6
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Задачка на математику и логику.

2ffinder
Я думаю, МоКа, приведёт в конце разбор наших решений, продемонстрировав как различные алгоритмы характеризуют те или иные качества деятельности будущего сотрудника. Так что не стоит наперёд его называть http://lurkmore.ru/Синдром_вахтёра, МоКа этот тред не ради бахвальства затеял, а в целях просвятительских: систематизировать подход к подбору кадров.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
Hurrit (18.03.2011), moka (17.03.2011), Randomize (17.03.2011)
Старый 17.03.2011, 21:37   #7
FireOwl
Бывалый
 
Аватар для FireOwl
 
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений
(для 1,836 пользователей)
Ответ: Задачка на математику и логику.

Пробую принять замечания во внимание:

int mw=5,mh=5,x;
int[,] m=new int[mw,mh]; // Тут меня всегда поправляет студия, хотя я знаю как правильно =)
// Предполагаю, что массив заданных размеров способен вместить 100 чисел. Но можно условие присобачить.
for(int c=0;c<100;c++){
m[c%mw][c/mw]=(c+1)*5; // Здесь я наверное что-то не понимаю. Я заполняю массив "книжкой", т.е. построчно,
// справа налево, сверху вниз. А как надо?
}
// Массив возможно изменяется, предполагаю, что числа могли перемещаться любым случайным (или нет) образом. Переменные mw,mh принимают новое значение.
// Тут мне не приходит в голову других решений кроме поиска по числу.

for(int c=0;c<5;c++){
for(int a=0;a<mw*mh;a++){
if(m[a%mw][a/mw]==(c+1)*20){ Console.WriteLine("m[{0},{1}]={2}",(a%mw),(a/mw),(c+1)*20); break; }
}
}

// В остальных случаях можно подправить мое первое решение под поиск по новым размерам, или сохраненным старым.
// (Если новый массив числа заполнят по тому же принципу, или останутся "в уголке" с теми же координатами, что и в массиве старого размера)

P.S. Я не считаю себя еще настолько крутым программистом, что бы с презрением относиться к "школьным" задачкам. Мне интересно сравнить мое решение с не моим.
P.P.S. Почему форум затирает все отступы перед строкой? (Кроме текста внутри тега code)
__________________
N"Gasta! Kvata! Kvakis!
Ahkstas so novajxletero (oix jhemile) so Ranetauw.
(Offline)
 
Ответить с цитированием
Старый 17.03.2011, 21:40   #8
ffinder
Дэвелопер
 
Аватар для ffinder
 
Регистрация: 10.09.2007
Сообщений: 1,442
Написано 793 полезных сообщений
(для 1,460 пользователей)
Ответ: Задачка на математику и логику.

почему я должен доверять моке в анализе личности?
подбор кадров происходит гораздо проще. есть два фактора:
1) может/не может писать код
2) будет/не будет писать код за оговоренные деньги
фсё.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
КостяБатон (19.03.2011)
Старый 17.03.2011, 21:51   #9
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Задачка на математику и логику.

Сообщение от ffinder Посмотреть сообщение
почему я должен доверять моке в анализе личности?
подбор кадров происходит гораздо проще. есть два фактора:
1) может/не может писать код
2) будет/не будет писать код за оговоренные деньги
фсё.
Зы, почитал на лукоморе про Синдром Вахтёра (Спасибо impersionalis), посмеялся, под конец рабочего дня, реально подняло настроение.

ffinder, Скудно..
Сообщение от ffinder Посмотреть сообщение
почему я должен доверять моке в анализе личности?
Никому ты ничего не должен. Только мне интересна твоя позиция, получается я в твоём видении не способен выполнять задачи, которые выполняет человек принимая другого на работу? Мне любопытны аргументы. "Возраст", сразу говорю, не аргумент, и без обсуждений.
Какие критерии доверия для тебя будет выражать другой работодатель?

Сообщение от ffinder Посмотреть сообщение
1) может/не может писать код
Fail.

Сообщение от ffinder Посмотреть сообщение
2) будет/не будет писать код за оговоренные деньги
Коммерческая разработка это не только писать код. Fail снова.

Сообщение от ffinder Посмотреть сообщение
фсё.
Третий Fail.

Если потребуются аргументы "фэйлов", предоставлю с радостью
(Offline)
 
Ответить с цитированием
Старый 17.03.2011, 22:05   #10
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Задачка на математику и логику.

FireOwl, я тоже обожаю задачки такого рода.
По поводу версии 2:
Первое заполнение массива было правильным в плане итераций, лишь поменяны местами индексы. Не "m[c%5,c/5]", а "m[c/5,c%5]". Тогда будет перелистывать все y для каждого x.
В новом примере, первый цикл теперь выходит за пределы массива, т.к. цикл до 100, а по формуле "c/mw" будут варианты больше 5, что вылезет как runtime ошибка.
Если поставить ограничение в первом цикле на 25, то программа продолжится.
Вторая часть программы с вложенным циклом верна, за исключением коррекции в первом (поменять вычисления для индексов местами, для y будет с модулем.

Результат правильный, с коррекциями.

Теперь относительно вложенного цикла (for (int a=0;a<mw*mh;a++) {). Посчитай количество итераций, с учётом первого цикла. В данном случае вложенный цикл почти не отличается от первого цикла, где ты заполняешь сам массив, это смекалка для данной задачи - ты бы мог вывезти результат при заполнении массива, плюс за смекалку, минус за то что меньше математики и дополнительного цикла, в данном бы случае, стоило бы узнать у тестируемого, как бы он разделил приложение, сделал бы второй цикл, для проверки математики.

В первом цикле ты устанавливаешь результат, но ты ведь его уже приписал в массиве, он уже есть в массиве, и его не нужно получать. Закономерность запрашиваемых циклов в том что они чередуются 20, думаю это ещё одна подсказка, что поможет упростить.
Второй цикл, можно разобрать для читаемости на два, как цикл по x и по y, но и этот вариант хорош, лишь менее читабелен и немного менее адаптируемый для модификаций.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
FireOwl (18.03.2011)
Старый 17.03.2011, 22:13   #11
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Задачка на математику и логику.

Я бы написал как-то так:

int[,] m= new int[5,5];
int step 5;
int current 0;
for(
int x=0x<5x++)
{
  for(
int y=0y<5y++)
  {
     
current += step;
     
m[x,y] = current;
     if (
current 20 == 0Console.WtiteLine("m[{0},{1}]={2}"x,y,current );
  }

(Offline)
 
Ответить с цитированием
Старый 17.03.2011, 22:17   #12
Romanzes
Разработчик
 
Аватар для Romanzes
 
Регистрация: 06.04.2008
Сообщений: 541
Написано 196 полезных сообщений
(для 637 пользователей)
Ответ: Задачка на математику и логику.

Вывезти на экран координату в массиве (x,y) по которым в массиве m будет одно из чисел: 20, 40, 60, 80, 100.
Судя по этой фразе, на экран нужно вывести всего одну координату.
Но приведенный ниже "Ожидаемый результат" противоречит этому выводу.

pax, твой код выведет и число 0, и 120, а их не нужно выводить.

PS: А что, обязательно нужно заполнять массив последовательными числами? Почему нельзя вставить в (0,0) число 50, а в (0,1) число 45?

        //Java
        int arrW = 5, arrH = 5;
        int[][] arr = new int[arrW][arrH];
        for (int i=0; i<arrW; i++) {
            for (int j=0; j<arrH; j++) {
                int num = (Rnd(20)+1)*5; //Rnd(int n) - возвращает целое число от 0 до n
                arr[i][j] = num;
                if (num>0 && num%20==0) {
                    System.out.println("m["+i+","+j+"] = "+num);
                }
            }
        }
В общем, задача сформулирована расплывчато, можно трактовать ее по-разному
(Offline)
 
Ответить с цитированием
Старый 17.03.2011, 22:19   #13
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Задачка на математику и логику.

Сообщение от Romanzes Посмотреть сообщение
pax, твой код выведет и число 0, и 120, а их не нужно выводить.
0 не выведет, т.к. начинается с 5


Сообщение от Romanzes Посмотреть сообщение
Судя по этой фразе, на экран нужно вывести всего одну координату.
тут да не внимательно прочитал )
(Offline)
 
Ответить с цитированием
Старый 17.03.2011, 22:22   #14
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Задачка на математику и логику.

Сообщение от pax Посмотреть сообщение
Я бы написал как-то так:

int[,] m= new int[5,5];
int step 5;
int current 0;
for(
int x=0x<5x++)
{
  for(
int y=0y<5y++)
  {
     
current += step;
     
m[x,y] = current;
     if (
current 20 == 0Console.WtiteLine("m[{0},{1}]={2}"x,y,current );
  }

тогда мод:

int[,] m= new int[5,5];
int step 5;
int current 0;
bool found false;
for(
int x=0x<5x++)
{
  for(
int y=0y<5y++)
  {
     
current += step;
     
m[x,y] = current;
     if (!
found &&current 20 == 0
     {
        
Console.WtiteLine("m[{0},{1}]={2}"x,y,current );
        
found true;
     }
  }

(Offline)
 
Ответить с цитированием
Старый 17.03.2011, 22:26   #15
Romanzes
Разработчик
 
Аватар для Romanzes
 
Регистрация: 06.04.2008
Сообщений: 541
Написано 196 полезных сообщений
(для 637 пользователей)
Ответ: Задачка на математику и логику.

Сообщение от pax Посмотреть сообщение
0 не выведет, т.к. начинается с 5
Точно, я тоже ступил
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 15:22.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com