📜  生成具有偶数个元素的整数的最小和序列

📅  最后修改于: 2021-04-23 17:43:44             🧑  作者: Mango

给定整数N ,任务是生成N个正整数的序列,使得:

  • 每个位于偶数位置的元素都必须大于其后一个元素及其前一个元素,即arr [i – 1] arr [i + 1]
  • 元素的总和必须是偶数且最小可能(在所有可能的序列中)。

例子:

方法:为了获得具有最小和的序列,序列的形式必须为1、2、1、2、1、1、2、1 ;对于序列之和不为偶数的情况,任何2序列中的可以更改为3,以使序列的总和均匀。

下面是上述方法的实现:

C++
// C++ implementation of above approach
#include 
using namespace std;
  
// Function to print the required sequence
void make_sequence(int N)
{
  
    // arr[] will hold the sequence
    // sum variable will store the sum
    // of the sequence
    int arr[N + 1], sum = 0;
  
    for (int i = 1; i <= N; i++) {
  
        if (i % 2 == 1)
            arr[i] = 1;
        else
            arr[i] = 2;
  
        sum += arr[i];
    }
  
    // If sum of the sequence is odd
    if (sum % 2 == 1)
        arr[2] = 3;
  
    // Print the sequence
    for (int i = 1; i <= N; i++)
        cout << arr[i] << " ";
}
  
// Driver Code
int main()
{
    int N = 9;
  
    make_sequence(N);
  
    return 0;
}


Java
// Java implementation of above approach
  
class GFG
{
  
// Function to print the required sequence
static void make_sequence(int N)
{
  
    // arr[] will hold the sequence
    // sum variable will store the sum
    // of the sequence
    int[] arr = new int[N + 1];
    int sum = 0;
  
    for (int i = 1; i <= N; i++) 
    {
        if (i % 2 == 1)
            arr[i] = 1;
        else
            arr[i] = 2;
  
        sum += arr[i];
    }
  
    // If sum of the sequence is odd
    if (sum % 2 == 1)
        arr[2] = 3;
  
    // Print the sequence
    for (int i = 1; i <= N; i++)
        System.out.print(arr[i] + " ");
}
  
// Driver Code
public static void main(String[] args)
{
    int N = 9;
    make_sequence(N);
}
}
  
// This code is contributed by iAyushRaj.


Python 3
# Python 3 implementation of above approach
  
# Function to print the required sequence
def make_sequence( N):
  
    # arr[] will hold the sequence
    # sum variable will store the sum
    # of the sequence
    arr = [0] * (N + 1)
    sum = 0
  
    for i in range(1, N + 1):
  
        if (i % 2 == 1):
            arr[i] = 1
        else:
            arr[i] = 2
  
        sum += arr[i]
  
    # If sum of the sequence is odd
    if (sum % 2 == 1):
        arr[2] = 3
  
    # Print the sequence
    for i in range(1, N + 1):
        print(arr[i], end = " ")
  
# Driver Code
if __name__ == "__main__":
      
    N = 9
    make_sequence(N)
  
# This code is contributed by ita_c


C#
// C# implementation of above approach
using System;
  
class GFG
{
  
// Function to print the required sequence
public static void make_sequence(int N)
{
  
    // arr will hold the sequence
    // sum variable will store the sum
    // of the sequence
    int[] arr = new int[N + 1];
    int sum = 0;
  
    for (int i = 1; i <= N; i++)
    {
        if (i % 2 == 1)
            arr[i] = 1;
        else
            arr[i] = 2;
  
        sum += arr[i];
    }
  
    // If sum of the sequence is odd
    if (sum % 2 == 1)
        arr[2] = 3;
  
    // Print the sequence
    for (int i = 1; i <= N; i++)
        Console.Write(arr[i] + " ");
}
  
// Driver Code
public static void Main()
{
    int N = 9;
  
    make_sequence(N);
}
}
  
// This code is contributed by iAyushRaj.


PHP


输出:
1 3 1 2 1 2 1 2 1