📜  求最大余数总和的排列

📅  最后修改于: 2021-10-25 11:27:26             🧑  作者: Mango

给定一个整数N ,任务是找到从1N的整数的排列,使得\sum_{i=1}^{N}P_i\mod i   是最大值。
例子:

处理方法:众所周知,与Y后的数X的最大值是Y-1 。将产生最大 mosulus 值总和的排列将为{N, 1, 2, 3, …., N – 1}
对表达式求值后P_i\mod i   在上面的数组上,输出数组将为{0, 1, 2, 3, …., N – 1} ,这是可以获得的最大值。
下面是上述方法的实现:

C++
// C++ implementation of the approach
#include 
using namespace std;
 
// Function to find the permutation
vector Findpermutation(int n)
{
    vector a(n + 1);
 
    // Put n at the first index 1
    a[1] = n;
 
    // Put all the numbers from
    // 2 to n sequentially
    for (int i = 2; i <= n; i++)
        a[i] = i - 1;
 
    return a;
}
 
// Driver code
int main()
{
    int n = 8;
 
    vector v = Findpermutation(n);
 
    // Display the permutation
    for (int i = 1; i <= n; i++)
        cout << v[i] << ' ';
 
    return 0;
}


Java
// Java implementation of the approach
import java.util.*;
class GFG
{
 
// Function to find the permutation
static int[] Findpermutation(int n)
{
    int [] a = new int[n + 1];
 
    // Put n at the first index 1
    a[1] = n;
 
    // Put all the numbers from
    // 2 to n sequentially
    for (int i = 2; i <= n; i++)
        a[i] = i - 1;
 
    return a;
}
 
// Driver code
public static void main(String[] args)
{
    int n = 8;
 
    int []v = Findpermutation(n);
 
    // Display the permutation
    for (int i = 1; i <= n; i++)
        System.out.print(v[i] + " ");
}
}
 
// This code is contributed by 29AjayKumar


Python3
# Python3 implementation of the approach
 
# Function to find the permutation
def Findpermutation(n) :
 
    a = [0] * (n + 1);
 
    # Put n at the first index 1
    a[1] = n;
 
    # Put all the numbers from
    # 2 to n sequentially
    for i in range(2, n + 1) :
        a[i] = i - 1;
 
    return a;
 
# Driver code
if __name__ == "__main__" :
 
    n = 8;
 
    v = Findpermutation(n);
 
    # Display the permutation
    for i in range(1, n + 1) :
        print(v[i], end = ' ');
 
# This code is contributed by AnkitRai01


C#
// C# implementation of the approach
using System;
 
class GFG
{
 
// Function to find the permutation
static int[] Findpermutation(int n)
{
    int [] a = new int[n + 1];
 
    // Put n at the first index 1
    a[1] = n;
 
    // Put all the numbers from
    // 2 to n sequentially
    for (int i = 2; i <= n; i++)
        a[i] = i - 1;
 
    return a;
}
 
// Driver code
public static void Main(String[] args)
{
    int n = 8;
 
    int []v = Findpermutation(n);
 
    // Display the permutation
    for (int i = 1; i <= n; i++)
        Console.Write(v[i] + " ");
}
}
 
// This code is contributed by 29AjayKumar


Javascript


输出:

8 1 2 3 4 5 6 7

时间复杂度: O(N)

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程