EPIDEMIASH
@EPIDEMIASH
Человек швейцарский нож

Как корректно сделать чередование?

Васап!

Есть входные параметры (к примеру):
Начало 11
Конец 18
Некое название name

Первым делом, нужно получить массив чисел от 11 до 18

int start = 11, last = 18;
int[] arr = Enumerable.Range(start, last - start + 1).ToArray();
int count = arr.Count();


Каким образом мне сделать чередование, подставляя значения из массива.

name11 name12 name13 name14 name15 name16 name17 name18
name12 name13 name14 name15 name16 name17 name18 name11
name13 name14 name15 name16 name17 name18 name11 name12
name14 name15 name16 name17 name18 name11 name12 name13
name15 name16 name17 name18 name11 name12 name13 name14
name16 name17 name18 name11 name12 name13 name14 name15
name17 name18 name11 name12 name13 name14 name15 name16
name18 name11 name12 name13 name14 name15 name16 name17
name11 name12 name13 name14 name15 name16 name17 name18
и тд.

for (int j = 0; j < count; j++)
{

for (int i = 11; i < 18 + 1; ++i)
{
TextBox.AppendText("name" + i.ToString() + " ");
}
TextBox.AppendText(Environment.NewLine);
}


Так я получаю:
name11 name12 name13 name14 name15 name16 name17 name18
name11 name12 name13 name14 name15 name16 name17 name18
name11 name12 name13 name14 name15 name16 name17 name18
name11 name12 name13 name14 name15 name16 name17 name18
name11 name12 name13 name14 name15 name16 name17 name18
name11 name12 name13 name14 name15 name16 name17 name18
name11 name12 name13 name14 name15 name16 name17 name18

А мне нужно, чтобы первый элемент, смещался в конец.
  • Вопрос задан
  • 216 просмотров
Решения вопроса 1
axifive
@axifive
Software Engineer
Корректно сделать круговое смещение поможет операция mod
Как это работает:
0 mod 8 = 0
1 mod 8 = 1
...
7 mod 8 = 7
8 mod 8 = 0
9 mod 8 = 1
10 mod 8 = 2
...
16 mod 8 = 0
и тд по кругу

int start = 11, last = 18;
int[] arr = Enumerable.Range(start, last - start + 1).ToArray();
for (int j = 0; j < count; j++) {
    for (int i = 0; i < count; i++) {
        Console.Write($"name{arr[(i + j) % count]} ");
    }
    Console.WriteLine();
}

https://onlinegdb.com/yLLXOKxDh
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Ertanic
Если я правильно понял, тогда просто берёшь, перебираешь массив и соединяешь строку со значением из массива:
//  Fix2
var count = 5;
var counter = 0;

var min = 1;
var max = 6;

do 
{
    var str = "";
    for (int i = min; i < max + 1; ++i)
        str += $"name{i} ";
    Console.Write(str + '\n');
    ++counter;
} while (counter < count);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы