原文:

给定一个始终为偶数的整数 n ,我们的任务是按照给定的条件打印 n 个不同的数字:

  • 前半部分数字是偶数,而另一半数字是奇数
  • 前半数的元素和后半数的元素和应该相等

如果上述条件满足,则打印数组,否则输出“-1”。 例:

输入: n = 4 输出: 2 4 1 5 说明: 给定数字 4 我们需要打印 4 个数字。前半部分= 2,4,它们的和是 6,另一半= 1,5,它们的和也是 6。 输入: n = 22 输出: -1 说明: 无法打印所需数组。

方法: 要解决上面提到的问题,我们必须观察到整数 n 必须是 4 的倍数

  • 我们知道前 n/2 个偶数的和将是偶数,所以如果其他 n/2 个整数的和也是偶数,那么 n/2 一定是偶数,因为奇数个奇数的和总是奇数。
  • 如果 n/2 是偶数,那么 n 是 4 的倍数,所以如果 n 不能被 4 整除,那么答案是“-1”,否则,会有一个可能的数组。
  • 为了打印数组,我们将考虑两个部分,即第一个部分是 n/2 个元素,是 2 的倍数,另一半是 2–1 的倍数。对于数组中的最后一个元素,我们将通过应用直接公式 n n/2–1 来计算整数,因为我们应该使两半的和相等。

以下是上述方法的实现:

c

// c   implementation to print n distinct numbers
#include 
using namespace std;
// function to print the required array
bool printarr(int n)
{
    // check if number is a multiple of 4
    if (n % 4 == 0) {
        // printing left half of the array
        for (int i = 1; i <= n / 2; i  )
            cout << i * 2 << ' ';
        // printing right half of the array
        for (int i = 1; i < n / 2; i  )
            cout << i * 2 - 1 << ' ';
        cout << n   n / 2 - 1 << '\n';
    }
    else
        cout << "-1";
}
// driver code
int main()
{
    int n = 22;
    printarr(n);
    return 0;
}

java 语言(一种计算机语言,尤用于创建网站)

// java implementation to print n distinct numbers
import java.util.*;
class gfg{
// function to print the required array
static void printarr(int n)
{
    // check if number is a multiple of 4
    if(n % 4 == 0)
    {
       // printing left half of the array
       for(int i = 1; i <= n / 2; i  )
           system.out.print(i * 2   " ");
       // printing right half of the array
       for(int i = 1; i < n / 2; i  )
           system.out.print(i * 2 - 1   " ");
       system.out.println(n   n / 2 - 1);
    }
    else
        system.out.print("-1");
}
// driver code
public static void main(string[] args)
{
    int n = 22;
    printarr(n);
}
}
// this code is contributed by amal kumar choubey

python 3

# python3 implementation to print
# n distinct numbers
# function to print the required array
def printarr(n):
    # check if number is a multiple of 4
    if (n % 4 == 0):
        # printing left half of the array
        for i in range(1, (n / 2)   1):
            print (i * 2, end = " ")
        # printing right half of the array
        for i in range(1, n / 2):
            print (i * 2 - 1, end = " ")
        print (n   n / 2 - 1, end = "\n")
    else:
        print ("-1")
# driver code
n = 22
printarr(n)
# this code is contributed by pratikbasu

c

// c# implementation to print n distinct numbers
using system;
public class gfg{
// function to print the required array
static void printarr(int n)
{
    // check if number is a multiple of 4
    if(n % 4 == 0)
    {
    // printing left half of the array
    for(int i = 1; i <= n / 2; i  )
        console.write(i * 2   " ");
    // printing right half of the array
    for(int i = 1; i < n / 2; i  )
        console.write(i * 2 - 1   " ");
    console.writeline(n   n / 2 - 1);
    }
    else
        console.write("-1");
}
// driver code
public static void main(string[] args)
{
    int n = 22;
    printarr(n);
}
}
// this code is contributed by 29ajaykumar

java 描述语言


output: 

-1

时间复杂度: o(n)

辅助空间: o(1)