Вставить новый элемент после последнего положительного - C#
Формулировка задачи:
В общем нужно сделать сдвиг массива,чтобы занести новый эл-нт.Я запутался с циклом моего "сдвига".Он работает,но не очень хорошо)Если эл-нт находится на последней позиции и предпоследней.Не могу придумать,как сделать
class Program
{
static int [] setarr(int n)
{
int[] arr = new int[2 * n];
for (int i=0;i<n;i++)
{
Console.Write("Arr[{0}]=", i);
arr[i] = Convert.ToInt32(Console.ReadLine());
}
return arr;
}
static void print (int [] arr, int n)
{
for (int i=0;i<n;i++)
{
Console.Write("{0}", arr[i]);
}
Console.WriteLine();
}
static void add (int [] arr,ref int n)
{
for (int i=n;i>=0;i--)
{
if(arr[i-1]>0)
{
int x = arr[i];
++n;
arr[i] = Convert.ToInt32(Console.ReadLine());
arr[++i] = x;
break;
}
}
}
static void Main()
{
Console.Write("Введите размерность массива:");
int n = Convert.ToInt32(Console.ReadLine());
int[] arr = setarr(n);
Console.WriteLine("Исходный массив:");
print(arr, n);
Console.Write("Введите новое значение:");
add(arr,ref n);
Console.WriteLine("Изменённый массив:");
print(arr, n);
}
}Решение задачи: «Вставить новый элемент после последнего положительного»
textual
Листинг программы
static int[] setarr(int n)
{
int[] arr = new int[n];
for (int i = 0; i < n; i++)
{
Console.Write("Arr[{0}]=", i);
arr[i] = Convert.ToInt32(Console.ReadLine());
}
return arr;
}
static void print(int[] arr)
{
for (int i = 0; i < arr.Length; i++)
{
Console.Write("{0}", arr[i]);
}
Console.WriteLine();
}
static int[] add(int[] arr,int pos, int k)
{
int[] result = new int[arr.Length + 1];
bool inserted = false;int insVal = 0;
for(int i = 0; i < arr.Length; i++)
{
if (i == pos)
{
result[i] = k;
inserted = true;
insVal = arr[i];
}
else
{
result[i] = arr[i];
}
}
if (!inserted)
{
result[arr.Length] = k;
}
else
{
result[arr.Length] = insVal;
}
return result;
}
static int[] addAfterLastPositive(int[] arr, int k)
{
int pos = 0;
for(int i = 0; i < arr.Length; i++)
{
if (arr[i] > 0)
{
pos = i;
}
}
return add(arr, pos+1, k);
}
static void Main()
{
Console.Write("Введите размерность массива:");
int n = Convert.ToInt32(Console.ReadLine());
int[] arr = setarr(n);
Console.WriteLine("Исходный массив:");
print(arr);
Console.Write("Введите новое значение:");
int k = Convert.ToInt32(Console.ReadLine());
arr = addAfterLastPositive(arr, k);
Console.WriteLine("Изменённый массив:");
print(arr);
Console.ReadKey();
}