📌  相关文章
📜  构造给定大小的数组,其中元素在偶数位置可被相邻的左边整除

📅  最后修改于: 2022-05-13 01:56:05.924000             🧑  作者: Mango

构造给定大小的数组,其中元素在偶数位置可被相邻的左边整除

给定一个整数N ,任务是构造和打印一个数组,这样:

  • 数组的大小为 N
  • 数组中的元素在 [1, 2*N] 范围内
  • 数组中的每个元素都是不同的
  • 偶数位置的元素可以被它们相邻的左边整除,但是对于奇数位置的元素一定不能这样,即
    • arr[i] % arr[i-1] == 0 对于 i % 2 == 0 为真
    • arr[i] % arr[i-1] != 0 对于 i % 2 != 0 为真
  • 数组被认为是 1-indexed。

例子:

方法:根据给定的条件,可以有多个大小为 N 的数组。根据以下观察,这是一种简单的贪婪方法来构建其中一个:

基于以上观察,可以采用以下方法解决问题:

  • 声明一个大小为 N+1 的数组来存储答案并将变量 X 初始化为 1。
  • 从 1 迭代到 N。
  • 在每个奇数索引处,存储连续的奇数。
  • 在每个偶数索引处,将整数的两倍存储在前一个索引处。

下面是上述方法的实现:

C++
// C++ Code for above approach
#include 
using namespace std;
 
// Function to find an array such
// that elements at even positions
// are divisible by their previous
// element and elements at odd positions
// are not
void constructArray(int N)
{
    // Declaring array A to store the answer
    int ans[N + 1];
 
    // Initializing a variable X by 1
    int X = 1;
 
    // Iterating from 1 to N and storing
    // consecutive odd integers at odd
    // indices and twice of element at
    // previous index at even indices
    for (int i = 1; i <= N; i++) {
        if (i % 2 == 1) {
            ans[i] = X;
        }
        else {
            ans[i] = 2 * ans[i - 1];
            X += 2;
        }
    }
 
    // Printing the array
    for (int i = 1; i <= N; i++) {
        cout << ans[i] << " ";
    }
}
 
// Driver Code
int main()
{
    int N = 7;
    constructArray(N);
 
    return 0;
}


Java
// Java Code for above approach
import java.io.*;
 
class GFG {
 
// Function to find an array such
// that elements at even positions
// are divisible by their previous
// element and elements at odd positions
// are not
  static void constructArray(int N)
{
    // Declaring array A to store the answer
    int ans[] = new int[N + 1];
 
    // Initializing a variable X by 1
    int X = 1;
 
    // Iterating from 1 to N and storing
    // consecutive odd integers at odd
    // indices and twice of element at
    // previous index at even indices
    for (int i = 1; i <= N; i++) {
        if (i % 2 == 1) {
            ans[i] = X;
        }
        else {
            ans[i] = 2 * ans[i - 1];
            X += 2;
        }
    }
 
    // Printing the array
    for (int i = 1; i <= N; i++) {
        System.out.print(ans[i] + " ");
    }
}
 
// Driver Code
    public static void main (String[] args) {
         int N = 7;
            constructArray(N);
    }
}
 
// This code is contributed by hrithikgarg03188.


Python3
# Python Code for above approach
 
# Function to find an array such
# that elements at even positions
# are divisible by their previous
# element and elements at odd positions
# are not
def constructArray(N):
 
    # Declaring array A to store the answer
    ans = [0 for i in range(N + 1)]
 
    # Initializing a variable X by 1
    X = 1
 
    # Iterating from 1 to N and storing
    # consecutive odd integers at odd
    # indices and twice of element at
    # previous index at even indices
    for i in range(1, N + 1):
        if (i % 2 == 1):
            ans[i] = X
        else:
            ans[i] = 2 * ans[i - 1]
            X += 2
 
    # Printing the array
    for i in range(1, N + 1):
        print(ans[i],end = " ")
 
# Driver Code
N = 7
constructArray(N)
 
# This code is contributed by shinjanpatra


C#
using System;
using System.Collections.Generic;
public class GFG {
 
  // Function to find an array such
  // that elements at even positions
  // are divisible by their previous
  // element and elements at odd positions
  // are not
  static void constructArray(int N)
  {
    // Declaring array A to store the answer
    int[] ans = new int[N + 1];
 
    // Initializing a variable X by 1
    int X = 1;
 
    // Iterating from 1 to N and storing
    // consecutive odd integers at odd
    // indices and twice of element at
    // previous index at even indices
    for (int i = 1; i <= N; i++) {
      if (i % 2 == 1) {
        ans[i] = X;
      }
      else {
        ans[i] = 2 * ans[i - 1];
        X += 2;
      }
    }
 
    // Printing the array
    for (int i = 1; i <= N; i++) {
      Console.Write(ans[i] + " ");
    }
  }
  static public void Main()
  {
    int N = 7;
    constructArray(N);
 
  }
}
 
// This code is contributed by phasing17


Javascript


输出
1 2 3 6 5 10 7 

时间复杂度: O(N)
辅助空间: O(N)