BU>>Но загвоздка есть в том, что Земля вертиться, а сл-но "туда" не все равно как лететь. V>Но ведь вместе с землей вращается и атмосфера, опираясь на которую летит самолет!
Это не важно RTFM 'Сила Кориолиса' 2m[VxW] =0 при V=0
int element_print_all( struct element *pCurrentElement)
{
struct element *pNextElement = pCurrentElement;
while(pNextElement->pElementNext != NULL)
{
printf("%d\n",pNextElement->value);
pNextElement = pNextElement->pElementNext;
}
// print last element
printf("%d\n",pNextElement->value);
return 0;
}
Основным преимуществом списка есть удаление и вставка в произвольном месте последовательности.
Обычно это место определяется указателем на елемент списка , например так
int add( struct element *pCurrentElement, struct element *pNewElement)
{
struct element *pNextElement;
pNewElement->pElementNext = pCurrentElement->pElementNext;
pCurrentElement->pElementNext = pNewElement;
return 0;
}
int main(void)
{
elementsCollection[0].value = 1;
elementsCollection[0].pElementNext = &elementsCollection[1];
Здравствуйте, Roman Pushkin, Вы писали:
RP>Здравствуйте, alexanderfedin, Вы писали:
A>>Имеется односвязанный список, из которого нужно удалить последний элемент. Указатель на последний элемент имеется. Вопрос: как удалить элемент, не имея указателя на голову списка и/или предшествующие элементы?
RP>Кто-нибудь знает как решить задачку?
ты уверен что у нее есть решение? не вижу возможности добраться до предыдущего элемента — после физического удаления элемента будет нарушена ссылочная целостноть. К постановке задачи не подкопаешься — разве что список циклический.
Здравствуйте, Roman Pushkin, Вы писали:
RP>Здравствуйте, minorlogic, Вы писали:
RP><skipped>
M>>ЧТО имеено нам даст пометка элементов ?
RP>Ну ты утомил меня, парень В общем, раз ты такой крутой, буду рад увидеть твой вариант (читай внимательно задание). Точка.
Странный тон , учитывая что мы не знакомы не НАХОДИТЕ ЛИ ?
По предыдущему посту я не понял , ВЫ согласны с тем что это решение имеет некоторые побочные эфекты, или это значит что я пишу полную чушь, которую даже не стоит коментировать ?
В любом случае я тоже устал писать одно и тоже в третий раз .
Здравствуйте, minorlogic, Вы писали:
M>Странный тон , учитывая что мы не знакомы не НАХОДИТЕ ЛИ ? M>По предыдущему посту я не понял , ВЫ согласны с тем что это решение имеет некоторые побочные эфекты, или это значит что я пишу полную чушь, которую даже не стоит коментировать ?
M>В любом случае я тоже устал писать одно и тоже в третий раз .
Я признаю, что я зря родился на свет, согласен что я грубиян, ничтожество, бездарность и моральный урод. Но это уже, кажется, оффтоп.
А по существу — решением было создать функцию (!), а не программировать второе издание System.Collections
Здравствуйте, kliff, Вы писали:
A>>>Имеется односвязанный список, из которого нужно удалить последний элемент. Указатель на последний элемент имеется. Вопрос: как удалить элемент, не имея указателя на голову списка и/или предшествующие элементы?
RP>>Кто-нибудь знает как решить задачку?
K>ты уверен что у нее есть решение? не вижу возможности добраться до предыдущего элемента — после физического удаления элемента будет нарушена ссылочная целостноть. К постановке задачи не подкопаешься — разве что список циклический.
Внесу некоторую ясность: я спросил про циклический список, но мастдаец заметил, что "может быть список и циклический, но размер его таков, что итерирование по нему займет слишком много времени" (дословно). Я предложил либо маркер на элементе списка, либо элементы — матрешки (wrappers), у которых можно заменить содержимое: был Node, стал NullNode.
Такой ответ его вполне удовлетворил.
Здравствуйте, alexanderfedin, Вы писали:
A>Предлагаю вашему вниманию вопросы и задачи, которые когда-либо были мне заданы на интервью. Надеюсь, что это может кому-то помочь либо интервьюировать, либо пройти интервью . Если у кого-то есть подобные задачи и вопросы — присоединяйтесь. A>Ответов сейчас давать не буду, предоставляя возможность подумать.
Здравствуйте, alexanderfedin, Вы писали:
A>Предлагаю вашему вниманию вопросы и задачи, которые когда-либо были мне заданы на интервью. Надеюсь, что это может кому-то помочь либо интервьюировать, либо пройти интервью . Если у кого-то есть подобные задачи и вопросы — присоединяйтесь.
Совсем свежее, с face-to-face интервью у Майкрософта: Есть счетчик километража в автомобиле. И вот, одному ненормальному пришло в голову сделать разряды этого счетчика не по основанию 10, а для каждого разряда своё: 4, 6, 2, 7, 10, 3. Вопрос: как это реализовать и какие тест кейзы вы можете предложить для такого счетчика?
Имеется сортированный односвязанный список. Вставить в него новый элемент.
Имеется числовая последовательность: 1, 1, 2, 3, 5, 8, 13,.. Написать алгоритм для продолжения последовательности.
Имеется список точек на плоскости с целочисленными координатами. Найти первые такие две точки, чтобы точка, лежащая посередине между ними, имела целочисленные координаты. Написать максимально простой алгоритм.
>> 8. Написать функцию обмена значений двух целых переменных с >> минимальными затратами памяти и времени. Примечание: >> команды/функции обмена значений переменных не существует
K>Баянище. a = b — a; b = b — a; a = a + b;
Некорректное решение. На IBM PC это будет работать, так как на нем нет переполнения с фиксированной точкой. На других машинах может вызвать исключение.
Pavel Dvorkin wrote: > > Здравствуйте, kittown, Вы писали: > >> > 8. Написать функцию обмена значений двух целых переменных с >> > минимальными затратами памяти и времени. Примечание: >> > команды/функции обмена значений переменных не существует > > K>Баянище. a = b — a; b = b — a; a = a + b; > > Некорректное решение. На IBM PC это будет работать, так как на нем нет > переполнения с фиксированной точкой. На других машинах может вызвать > исключение.
Во-1, перед ответом полезно почитать весь тред — ничего нового не
сказано. Во-2, это все равно будет работать на определенном
множестве значений. Для них это решение корректно, нехватает
лишь оговорки про ограниченность множества. Собственно как
и при практически любой арифметической операции.
а вот какое тестовое задание было у меня 2 года назад: написать программу, которая использует метаданные MS SQL Server. используя системные таблицы сервера нужно было вывести список баз, список таблиц, список полей в таблицах,....
Здравствуйте, _Hooter, Вы писали:
_H>Здравствуйте, alexanderfedin, Вы писали:
A>>Если у кого-то есть подобные задачи и вопросы — присоединяйтесь.
_H>Один из стандартных вопросов на знание SQL:
_H>Есть таблица с ключевым полем ID. Ключевое поле содержит челые числа. Например, 1, 2, 3, 4, 7, 8, 10, 11,...
_H>Задание: написать запрос для нахождения "дырки" в последовательности идентификаторов.
вот что я сваял за пару минут. возвращает не ВСЕ дырки, а НЕКОТОРЫЕ.
есть ли оптимальнее решение?
//создаем таблицу
create table #test (id int)
//заполняем значениями
insert #test(id) values (2)
insert #test(id) values (3)
insert #test(id) values (4)
insert #test(id) values (7)
insert #test(id) values (8)
insert #test(id) values (9)
//собственно решение
select t1.id + 1
from #test t1
where
t1.id != (select max(id) from #test)
and
not exists
(
select 1 from #test t2 where t2.id = t1.id + 1
)
//удаляем таблицу
drop table #test
Здравствуйте, nopal, Вы писали:
N>Здравствуйте, alexanderfedin, Вы писали:
N>а вот какое тестовое задание было у меня 2 года назад: написать программу, которая использует метаданные MS SQL Server. используя системные таблицы сервера нужно было вывести список баз, список таблиц, список полей в таблицах,....
я думаю такое можно задавать только администратору бд
Здравствуйте, ilya_ny, Вы писали:
_H>>Есть таблица с ключевым полем ID. Ключевое поле содержит челые числа. Например, 1, 2, 3, 4, 7, 8, 10, 11,... _H>>Задание: написать запрос для нахождения "дырки" в последовательности идентификаторов.
_>вот что я сваял за пару минут. возвращает не ВСЕ дырки, а НЕКОТОРЫЕ. _>есть ли оптимальнее решение? _>
_>
_>//собственно решение
_>select t1.id + 1
_>from #test t1
_>where
_>t1.id != (select max(id) from #test)
_>and
_>not exists
_>(
_> select 1 from #test t2 where t2.id = t1.id + 1
_>)
_>
_>
Често говоря, я не совсем понял, что значит "некоторые", так как не разбирался в твоем решении. Скорее всего оно правильное.
Но надо написать запрос для нахождения не "дырок", а "дырки". Всего одной.
Я должен уточнить: с помощью запроса надо найти первую "дырку" в последовательности. Если отсутствие этого уточнения кого-то ввело в заблуждение — прошу прощения.
А решение такое:
select min(f1.id)
from table1 f1 left join table1 f2 on f1.id + 1= f2.id
where f2.id is null;
Или нечто похожее. Но идея, надеюсь, понятна...
После выполнения запроса поле будет содержать некое значение, которое будет на 1 меньше, чем значение первой дырки.
Здравствуйте, _Hooter, Вы писали:
_H>Често говоря, я не совсем понял, что значит "некоторые", так как не разбирался в твоем решении. Скорее всего оно правильное.
некоторые — это значит, что если пропущено больше два и более чисел подряд, то вернется первое пропущенное, а не все пропущенные.
Пример: 1, 2, 5, 6, 9, 10
пропущены (3, 4) и (7, 8)
вернутся 3 и 7
_H>Но надо написать запрос для нахождения не "дырок", а "дырки". Всего одной.
_H>Я должен уточнить: с помощью запроса надо найти первую "дырку" в последовательности. Если отсутствие этого уточнения кого-то ввело в заблуждение — прошу прощения.
Если в моем рещениие написать min, то будет твой-же результат
твое рещение почти верно — надо min(f1.id + 1) возвращать, а не min(f1.id)
ну и конечо оно проще
select f1.id + 1
from #test f1 left join #test f2 on f1.id + 1= f2.id
where f2.id is null
>>> 8. Написать функцию обмена значений двух целых переменных с >>> минимальными затратами памяти и времени. Примечание: >>> команды/функции обмена значений переменных не существует
K>>Баянище. a = b — a; b = b — a; a = a + b;
_>Ещё ксоркой можно. Но на самом деле всё равно временный объект будет создан (в самом тривиальном случае это будет регистр процессора). Так что выгода такого изврата очень сомнительна.
Я бы сделал вот так: a = b ^ a; b = a ^ b; a = a ^ b;
Работать будет быстрее и будет исключена вероятность потери данных при больших значениях.
Здравствуйте, alexanderfedin, Вы писали:
A>Имеется сортированный односвязанный список. Вставить в него новый элемент.
Список:
+-----+ +-----+ +-----+
| a |->| b |->| c |->...
+-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+
^ => | a |->| b |->| z |->| c |->...
| +-----+ +-----+ +-----+ +-----+
+-----+
| z |
+-----+
b <= z <= c (по возрастанию)
b >= z >= c (по убыванию)
#include <iostream>
unsigned GetNextFibonachi(unsigned current)
{
static unsigned previous = 8;
unsigned res = current + previous;
previous = current;
return res;
}
int main()
{
for(int i = 13; i < 1000; )
{
i = GetNextFibonachi(i);
std::cout << i << std::endl;
}
return 0;
}
A>Имеется список точек на плоскости с целочисленными координатами. Найти первые такие две точки, чтобы точка, лежащая посередине между ними, имела целочисленные координаты. Написать максимально простой алгоритм.
Что-то типа этого:
#include <iostream>
#include <utility>
int main()
{
typedef std::pair<int, int> coord;
coord points[2][2];
bool found[2][2] = {false};
for(int i = 0; i < 5; i++) // достаточно первых пяти точек
{
int x, y, xt, yt;
std::cin >> x >> y; // пусть координаты подаются на stdin
xt = x & 1, yt = y & 1; // выясняем чётностьif(found[xt][yt])
{
std::cout << '(' << x << "; " << y << ") - ("
<< points[xt][yt].first << "; " << points[xt][yt].second << ")\n";
break;
}
else
{
points[xt][yt] = std::make_pair(x, y);
found[xt][yt] = true;
}
}
return 0;
}
>> 2. Имеется односвязанный список, из которого нужно удалить последний >> элемент. Указатель на последний элемент имеется. Вопрос: как >> удалить элемент, не имея указателя на голову списка и/или >> предшествующие элементы?
K>Если список циклический, очевидно. Если в элементе можно пометить, K>что это пустой конец списка, тоже очевидно. В противном случае нельзя K>получить указатель на предыдущий элемент, нужный для фиксации нового K>конца списка.
K>Но "просто удалить" элемент (free, delete) можно конечно всегда.
Не всегда Напишешь пример для С# и java?
... << RSDN@Home 1.1.3 stable >> Winamp: silent
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.