Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите решить задачу на C#.

Demi Blackcrane Профи (751), на голосовании 6 лет назад
Дан массив размера N и два целых числа K и M (1<K<N, 1<M<10). Перед элементом массива с номером K вставить M новых элементов с нулевыми значениями.

Уже сколько пытаюсь, ничего не получается.
Голосование за лучший ответ
Дейто Профи (910) 6 лет назад
если не получается
сожги тетрадь
*профит*
Demi BlackcraneПрофи (751) 6 лет назад
Я в Visual Studio пишу. Компьютер сжигать не хочу.
Дейто Профи (910) несколько способов 1. открой пейнт сделай скрин как ты делаешь свою фигнь дальше типа тыы её жжег 2.удали визуал студио
Mr. Perfectly Fine Оракул (63004) 6 лет назад
Нужно создать массив размерности N + M и скопировать туда элементы первого массива с позиции "ноль" по позицию "K - 1", после продолжить копировать данные с позиции "K" в оригинальном массиве в новый массив начиная с позиции "K + M".
var a = new int[N];
var b = new int[N+M];

for (int i = 0; i < k; ++i) b[i] = a[i];
for (int i = k; i < N; ++i) b[i+M] = a[i];
Jurijus ZaksasИскусственный Интеллект (426897) 6 лет назад
Как-то очень уж по-паскалевски.
Mr. Perfectly Fine Оракул (63004) По-школьному. Задача должна быть решена максимально примитивным способом.
Demi BlackcraneПрофи (751) 6 лет назад
Все, спасибо. Очень помог. Я до этого просто пытался в массив A добавить элементы (первый скрин), но теперь посмотрел на то, что ты написал, и понял, что это отличная идея. Конечно, не без "скатал", но все же сделал. С твой помощью. (Второй скрин).
Jurijus Zaksas Искусственный Интеллект (426897) 6 лет назад
class Program
{
static void PrintArray< T >(T[] a)
{
foreach (T e in a)
Console.Write(e.ToString() + " ");
Console.WriteLine();
}

static int[] GetArray(int _n)
{
long seed = DateTime.Now.ToFileTime();
Random r = new Random((int)seed);
int[] Result = new int[_n];
for (int i = 0; i < _n; i++)
Result[i] = r.Next(101) - 50;
return Result;
}

static void Main(string[] args)
{
Random r = new Random();
int n = r.Next(10) + 20;
int[] a = GetArray(n);
int k = r.Next(n-1) + 1;
int m = r.Next(10) + 1;
Console.WriteLine($"k={k} m={m}");
PrintArray(a);
List< int > l = a.ToList();
for (int i = 0; i < m; i++)
l.Insert(k, 0);
a = l.ToArray();
PrintArray(a);
Console.ReadKey();
}
}
Mr. Perfectly FineОракул (63004) 6 лет назад
PrintArray будет существенно лучше, если использовать StringBuilder, поскольку запись в stdout процесс не такой уж и быстрый с учётом того, что работает в C# не напрямую.
Jurijus Zaksas Искусственный Интеллект (426897) Даже если просто в строку все сначала засунуть, будет быстрее. Но для этих целей сойдет.
Похожие вопросы