jms wrote:А помоему там вполне четко описан циклический свдиг вправо на m.
Тогда вот:
Code: Select all
public class Task
{
// Есть массив A1, A2, ..., Am, Am+1, Am+2, ..., An.
// Без использования дополнительного массива преобразовать
// в массив Am+1, Am+2, ..., An, A1, A2, ..., Am
public void LoopShifting()
{
int shift = 7;
string[] arr = {"0","1","2","3","4"};
for (int i = 0; i < shift; i++)
{
ShiftRight(arr);
PrintResult(arr, i);
}
}
private void ShiftRight(string[] arr)
{
if (arr == null)
throw new ApplicationException("The parameter 'string[] arr' is null");
if (arr.Length < 2)
return;
string last = arr[arr.Length - 1];
for (int i = arr.Length - 1; i > 0; i--)
{
arr[i] = arr[i - 1];
}
arr[0] = last;
}
private void PrintResult(string[] arr, int step)
{
if (arr == null)
throw new ApplicationException("The parameter 'string[] arr' is null");
Debug.Write(String.Format("Step {0}: ", step));
foreach (var a in arr)
{
Debug.Write(a + " ");
}
Debug.WriteLine("");
}
}
Результат на каждый шаг:
Code: Select all
Step 0: 4 0 1 2 3
Step 1: 3 4 0 1 2
Step 2: 2 3 4 0 1
Step 3: 1 2 3 4 0
Step 4: 0 1 2 3 4
Step 5: 4 0 1 2 3
Step 6: 3 4 0 1 2
Вообще классически на интервью просят два решения - одно оптимизировано по ресурсам, другое по быстродействию.