Нужно пробежаться по элементам. Как это можно сделать? в параметр можно послать только сам массив.
Извращался превращением на лету в строку потом субстринг(1) и обратьно в целые и вроде получается но не нравится принимающей стороне.. как можно отсекать у массива по одному элементу?
Здравствуйте, nt2000, Вы писали:
N>как можно отсекать у массива по одному элементу?
Отсекать никак. Вместо отсекать — создать новый и скопировать в него хвост. Будет лучше, чем со строками, но так себе все равно решение. Проще всего было бы передать индекс.
N>Извращался превращением на лету в строку потом субстринг(1) и обратьно в целые и вроде получается но не нравится принимающей стороне.. как можно отсекать у массива по одному элементу?
public class A {
public int[] data;
public void fn(int h,int t) {
if (h>=t) return;
int m=(h+t)/2;
touch(data[m]);
fn(h,m-1); fn(m+1,t);
}
}
void fn(int[] data) {
var a=new A() { data=data };
a.fn(0,data.Length);
}
Здравствуйте, kov_serg, Вы писали:
_>Здравствуйте, nt2000, Вы писали:
N>>Нужно пробежаться по элементам. Как это можно сделать? в параметр можно послать только сам массив. _>
N>>Извращался превращением на лету в строку потом субстринг(1) и обратьно в целые и вроде получается но не нравится принимающей стороне.. как можно отсекать у массива по одному элементу? _>
_>public class A {
_> public int[] data;
_> public void fn(int h,int t) {
_> if (h>=t) return;
_> int m=(h+t)/2;
_> touch(data[m]);
_> fn(h,m-1); fn(m+1,t);
_> }
_>}
_>void fn(int[] data) {
_> var a=new A() { data=data };
_> a.fn(0,data.Length);
_>}
_>
к сожалению так нельзя. никаких фор, никаких новых(дополнительных) структур, голая рекурсия
надо перебрать при помочи самовызовов. можно создать вспомогательные методы но с теми же ограничениями.
И Linqи и другие навороты нельзя использовать. Вот что есть в System тем и пользуйся
Всё работает но они капризничают... Уже не знаю делать.. И не пишут что конкретно не так..
Your code did not compile. Please read and correct the errors below.
Error emitted from internal testing code. This error is occurring when our internal testing code is trying to call your code. It may mean that you have the wrong header for your solution, or a mismatched { } ( ) brace.
The best overloaded method match for '.DoCnt(int[], int[])' has some invalid arguments
Что за точка интересно перед названием метода? У меня нет никакой точки..
Вот они что хотят:
Constraints: Your method must be recursive and not use any loops (for, while, etc.). You may not use a string, array, or any data structure (stack, map, set, etc.) other than the lists passed. When your code is done running, the two lists should have the same contents as when the call began. Either do not modify the lists, or if you do modify them, restore them to their original state afterward. You may not declare any additional data structures. Your solution should run in no worse than O(N) time, where N is the number of elements in the lists.
ADD: Как возможный намёк — по приведенному тобою ограничения на реализацию — массив можно менять, но с условием, что ты его вернешь в исходное состояние. Но, без конкретного условия задачи, это так себе допущение. Да и мне, честно говоря, противна сама мысль пытаться использовать это. Всё таки, что-то мне подсказывает, что практически единственно верный правильный ответ — это засунуть им условие задачи назад, туда... в internal testing code.
N>Constraints: Your method must be recursive and not use any loops (for, while, etc.). You may not use a string, array, or any data structure (stack, map, set, etc.) other than the lists passed. When your code is done running, the two lists should have the same contents as when the call began. Either do not modify the lists, or if you do modify them, restore them to their original state afterward. You may not declare any additional data structures. Your solution should run in no worse than O(N) time, where N is the number of elements in the lists.
Конкретно эти приведенные ограничения не запрещают сделать
public void Iterate(int[] a){
if( a.length > 0 ){
Iterate(a, 0);
}
}
private void Iterate(int[] a, int start); // вот этот рекурсивный
Правда непонятно почему тут два списка.
Дал бы ты полные условия задачи что ли. А то возможно там смысл вообще в другом.
Здравствуйте, nt2000, Вы писали:
N>Нужно пробежаться по элементам. Как это можно сделать? в параметр можно послать только сам массив. N>Извращался превращением на лету в строку потом субстринг(1) и обратьно в целые и вроде получается но не нравится принимающей стороне.. как можно отсекать у массива по одному элементу?
В режиме бреда:
void Walk(int[] arr)
{
if (arr.Length > 0)
{
var another = new int[arr.Length - 1];
Array.Copy(arr, 1, another, 0, another.Length);
Walk(another);
}
}
Здравствуйте, nt2000, Вы писали:
N>Здравствуйте, Mystic Artifact, Вы писали:
MA>>А язык точно C#?
MA>>Плюс задача то какая? Откуда второй "список"?
N>надо стравнить два полученных списка и подсчитать количество одинаковых элементов. N>и твой способ возвращает верный ответ.. может у них глюк
Нет у них массив длинный и стека не хватает N>
Здравствуйте, fmiracle, Вы писали:
F>Здравствуйте, nt2000, Вы писали:
N>>
N>>Constraints: Your method must be recursive and not use any loops (for, while, etc.). You may not use a string, array, or any data structure (stack, map, set, etc.) other than the lists passed. When your code is done running, the two lists should have the same contents as when the call began. Either do not modify the lists, or if you do modify them, restore them to their original state afterward. You may not declare any additional data structures. Your solution should run in no worse than O(N) time, where N is the number of elements in the lists.
F>Конкретно эти приведенные ограничения не запрещают сделать F>
F>public void Iterate(int[] a){
F> if( a.length > 0 ){
F> Iterate(a, 0);
F> }
F>}
F>private void Iterate(int[] a, int start); // вот этот рекурсивный
F>
тут появлется int start.. к сожалению...
F>Правда непонятно почему тут два списка. F>Дал бы ты полные условия задачи что ли. А то возможно там смысл вообще в другом.
надо стравнить два полученных списка и подсчитать (и вернуть) количество одинаковых элементов.
не стал грузить вас деталями.. похожие задачи со строками проходят на ура.. пуляю в параметр субстринг(1) и отсекаются как орехи щелкаю
думал может нечто похожее и в массивах есть, трюк такой..
[Skip]
N>надо стравнить два полученных списка и подсчитать (и вернуть) количество одинаковых элементов. N>не стал грузить вас деталями.. похожие задачи со строками проходят на ура.. пуляю в параметр субстринг(1) и отсекаются как орехи щелкаю N>думал может нечто похожее и в массивах есть, трюк такой..
Детали лучше дай )) Какой сабстринг если тут массивы.
Здравствуйте, nt2000, Вы писали:
N>тут появлется int start.. к сожалению...
И что? Почему решение не может состоять из двух методов? Это стандартный приём же ж.
Здравствуйте, nt2000, Вы писали:
N>Нужно пробежаться по элементам. Как это можно сделать? в параметр можно послать только сам массив. N>Извращался превращением на лету в строку потом субстринг(1) и обратьно в целые и вроде получается но не нравится принимающей стороне.. как можно отсекать у массива по одному элементу?
Здравствуйте, nt2000, Вы писали: _>>Т.е. ты просто считаешь кол-во одинаковых элементов -- на кой такие извращения? BDSM программирование? N>да))) просто задачи в интернете.. это конкретно на знание самовызовов. А что такое BDSM ? Что то знакомое.. Это не ЛГЭБТЭ? или самоистязание? )
Примерно так:
D>Детали лучше дай )) Какой сабстринг если тут массивы.
нет просто сравнил как просто рекурсией по строке пройтись .. строка ведь тоже своеобразный массив..
были несколько подобных задач где вместо массива целых чисел были строки
детали такие: получаешь два массива и надо вернуть количество одинаковых индексов с одинаковыми значениями.
вроде решил при чём несколькими способами + здесь пару способов подкинули
но они не принимают:
The best overloaded method match for '.DoCnt(int[], int[])' has some invalid arguments
Your code did not compile. Please read and correct the errors below.
Error emitted from internal testing code. This error is occurring when our internal testing code is trying to call your code. If you see this, it may mean that you have the wrong header for your solution, or a mismatched { } ( ) brace.
The best overloaded method match for '.DoCnt(int[], int[])' has some invalid arguments
a требования такие:
Constraints: Your method must be recursive and not use any loops (for, while, etc.). You may not use a string, array, or any data structure (stack, map, set, etc.) other than the lists passed. When your code is done running, the two lists should have the same contents as when the call began. Either do not modify the lists, or if you do modify them, restore them to their original state afterward. Note again that you may not declare any additional data structures. Your solution should run in no worse than O(N) time, where N is the number of elements in the lists.
Здравствуйте, Mystic Artifact, Вы писали:
MA>Здравствуйте, nt2000, Вы писали:
N>>тут появлется int start.. к сожалению... MA> И что? Почему решение не может состоять из двух методов? Это стандартный приём же ж.
согласен.. делал уже так.. наверное точно у них глюк.. потому что есть парa задач где тоже выдают ошибку что должно быть минимум 2 метода хотя там я напичкал около 5ти методов
static int DoCnt(int[] v1, int[] v2){return DoCnt1(v1,v2,(v2.Length>v1.Length?v1.Length:v2.Length)-1);}
static int DoCnt1(int[]v1,int[]v2,int n){return n < 0?0:(v1[n]== v2[n]?1:0 )+DoCnt1(v1, v2, n - 1);}
Здравствуйте, nt2000, Вы писали:
N>a требования такие: N>
Constraints: Your method must be recursive and not use any loops (for, while, etc.). You may not use a string, array, or any data structure (stack, map, set, etc.) other than the lists passed. When your code is done running, the two lists should have the same contents as when the call began. Either do not modify the lists, or if you do modify them, restore them to their original state afterward. Note again that you may not declare any additional data structures. Your solution should run in no worse than O(N) time, where N is the number of elements in the lists.
Здесь нет ограничение на кол-во параметров. Можно свободно передавать текущий индекс и накопитель результата через параметры.
Типовая задачка на рекурсию.
Здравствуйте, nt2000, Вы писали:
Приведите полный текст задачи.
Полный текст того, что вы им отправляете.
Полный текст того, что получаете в ответ.
Телепатию нам отключили за неуплату ещё во время предыдущего дефолта.
Тут явно что-то очень простое. Если бы вы не темнили, то получили бы ответ в первый же день.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, nt2000, Вы писали:
N>Нужно пробежаться по элементам. Как это можно сделать? в параметр можно послать только сам массив. N>Извращался превращением на лету в строку потом субстринг(1) и обратьно в целые и вроде получается но не нравится принимающей стороне.. как можно отсекать у массива по одному элементу?
работать с массивом как с IEnumerable и передавать в метод IEnumerator ?
Здравствуйте, Sinclair, Вы писали:
S>Приведите полный текст задачи. S>Полный текст того, что вы им отправляете. S>Полный текст того, что получаете в ответ. S>Телепатию нам отключили за неуплату ещё во время предыдущего дефолта. S>Тут явно что-то очень простое. Если бы вы не темнили, то получили бы ответ в первый же день.
Вы конечно правы с одной стороны. Но, есть один момент — тяжело писать в ноуте привыкшему на компе, отдача клавиш совсем иная и приходится искать буквы сто раз исправлять переправлять опять искать клавишу удаления клавиши-стрелки и клавиши-буквы. А ещё может оказатся что мои рассусоливания разных подробностей и вовсе не относятся к делу и до конца читать никто не станет. Поэтому страраюсь сжато изложить только то что мне кажется сутью
Здравствуйте, samius, Вы писали:
S>Здравствуйте, nt2000, Вы писали:
N>>a требования такие:
S>Здесь нет ограничение на кол-во параметров. Можно свободно передавать текущий индекс и накопитель результата через параметры. S>Типовая задачка на рекурсию.
Meня сбило с толку сообщение
The best overloaded method match for '.DoCnt(int[], int[], int)' has some invalid arguments
Здравствуйте, nt2000, Вы писали:
N>Здравствуйте, Klikujiskaaan, Вы писали:
K>>Здравствуйте, nt2000, Вы писали: N>>>ВОПРОС: int[] и List<int> разные сущности?
K>>Внезапно — да
N>a я думал разные нписания одного и того же. ну спасибо )
Ответ на вопрос, разные ли это сущности, не столь однозначен и зависит от того, что подразумевается под словом "сущности".
Для начала, int[] и List<int> — типы данных. Массив целых и динамический список целых, соответственно. Оба являются реализациями одного и того же абстрактного типа данных List. Здесь List к конкретному языку не имеет никакого отношения, просто идея.
Эти типы не совместимы между собой на уровне языка, но сочетают в себе довольно много общего, кроме абстрактной идеи List. Оба являются представителями random-access структур данных и поддерживают внушительный список общих интерфейсов. Другими словами, реализуют несколько общих идей на уровне языка, описанных типами IEnumerable<int>, IList<int>, IReadonlyList<int>. Если бы метод принимал один из этих типов, то и int[] и List<int>, оба бы подошли в качестве аргументов.
Притом, что это типы разные, они допускают одинаковые подходы для работы с ними, что на уровне языка отражено соответствующим образом. Поэтому, ответ на вопрос, "разные ли это сущности", может быть "не вполне", если под сущностями подразумевать не конкретные типы, а подходы к работе с этими типами, в том числе на уровне языка.
А учитывая то, что для конкретной задачи нет необходимости для изменения этих структур данных, то можно и вовсе считать эти типы неотличимыми с точки зрения методов работы с ними в рамках конкретной задачи.
Что касается рекурсии, то немного странно видеть применение рекурсии для обхода именно этих реализаций абстрактного списка, учитывая то, что задача не требует для решения списков со случайным доступом и такая структура данных выглядит избыточной для примера. Язык C#, хоть и поддерживает рекурсию, совершенно не предназначен для использования рекурсии иначе, чем обучение рекурсии на весьма коротких последовательностях. А продвинутая техника использования рекурсии на C# слишком сложна для обучения рекурсии и основана на циклах (trampoline). В коде реальных проектов она не вполне уместна и годится лишь гикам для блогов и поддержания ЧСВ.