1.题目描述:
给定一个排列[A1,A2,A3,…,AN],每次可以将排列的第一个数移动到末尾,假设经过若干次移动后得到新的排列[B1,B2,B3,…,BN],求|B1-1|+|B2-2|+|B3-3|+…+|BN-N|的最小值。
2.题目求解
using System;
using System.Collections.Generic;
using System.Text;
namespace 移动排列
{
class Program
{
static void Main(string[] args)
{
long min = 10000;
long sum = 0;
long N;
long[] num = new long[100000];
N = long.Parse(Console.ReadLine());
string[] num1 = Console.ReadLine().Split(' ');
for (int i = 0; i < num1.Length - 1; i++)
num[i] = long.Parse(num1[i]);
for (int k = 1; k <= N; k++)
{
sum = 0;
for (int m = 1; m <= N; m++)
{
sum += Math.Abs(num[m] - m);
}
num[0] = num[1];
for (int j = 1; j < N; j++)
{
num[j] = num[j + 1];
}
num[N] = num[0];
if (sum < min)
min = sum;
}
Console.Write(min);
}
}
}