📌  相关文章
📜  将N表示为K个偶数或K个奇数的和,且允许重复

📅  最后修改于: 2021-05-17 19:08:32             🧑  作者: Mango

给定两个整数NK ,任务是找到一个大小为K的仅包含偶数或奇数元素的数组,其中该数组的所有元素之和为N。如果没有这样的数组,则打印“ No”。

例子:

方法:想法是选择K-1次最小的偶数或奇数,最后,在总和的帮助下计算最后一个数。如果最后一个数字对于偶数也是偶数,对于最小的奇数也是奇数。然后可以选择这样的阵列。否则,就不可能有这样的数组。

下面是上述方法的实现:

C++
// C++ implementation to find an
// array of size K with all the
// even or odd elements in the array
  
#include 
using namespace std;
  
// Function to find the array with
// all the even / odd elements
void getArrayOfSizeK(int n, int k)
{
    vector ans;
  
    // If array could be constructed
    // by adding odd elements
    // we need to find the kth
    // element is odd or even
  
    // if array of odd elements
    // would be the answer then
    // k-1 elements would be 1
  
    // First let's check
    // kth is odd or even
    int odd = n - ((k - 1) * 1);
  
    // if last element is also
    // an odd number then
    // we can choose odd
    // elements for our answer
    if (odd > 0
        && odd % 2 != 0) {
  
        // Add 1 in the array (k-1) times
        for (int i = 0; i < k - 1; i++) {
            ans.push_back(1);
        }
  
        // Add last odd element
        ans.push_back(odd);
    }
  
    // If array of even elements
    // would be the answer then
    // k-1 elements would be 2
    int even = n - ((k - 1) * 2);
  
    // if last element is also
    // an even number then
    // we can choose even
    // elements for our answer
    if (even > 0
        && even % 2 == 0
        && ans.size() == 0) {
  
        // Add 2 in the array (k-1) times
        for (int i = 0; i < k - 1; i++) {
            ans.push_back(2);
        }
  
        // Add last even element
        ans.push_back(even);
    }
  
    // Printing the array
    if (ans.size() > 0) {
        for (int i = 0; i < k; i++) {
            cout << ans[i] << " ";
        }
    }
    else {
        cout << "NO" << endl;
    }
}
  
// Driver Code
int main()
{
    int n = 10, k = 3;
    getArrayOfSizeK(n, k);
  
    return 0;
}


Java
// Java implementation to find an
// array of size K with all the
// even or odd elements in the array
import java.util.*;
  
class GFG{
  
// Function to find the array with
// all the even / odd elements
static void getArrayOfSizeK(int n, int k)
{
    Vector ans = new Vector();
  
    // If array could be constructed
    // by adding odd elements
    // we need to find the kth
    // element is odd or even
  
    // If array of odd elements
    // would be the answer then
    // k-1 elements would be 1
  
    // First let's check
    // kth is odd or even
    int odd = n - ((k - 1) * 1);
  
    // If last element is also
    // an odd number then
    // we can choose odd
    // elements for our answer
    if (odd > 0 && odd % 2 != 0)
    {
          
        // Add 1 in the array (k-1) times
        for(int i = 0; i < k - 1; i++)
        {
           ans.add(1);
        }
  
        // Add last odd element
        ans.add(odd);
    }
  
    // If array of even elements
    // would be the answer then
    // k-1 elements would be 2
    int even = n - ((k - 1) * 2);
  
    // If last element is also
    // an even number then
    // we can choose even
    // elements for our answer
    if (even > 0 && even % 2 == 0 && 
                  ans.size() == 0)
    {
  
        // Add 2 in the array (k-1) times
        for(int i = 0; i < k - 1; i++) 
        {
           ans.add(2);
        }
  
        // Add last even element
        ans.add(even);
    }
  
    // Printing the array
    if (ans.size() > 0)
    {
        for(int i = 0; i < k; i++)
        {
           System.out.print(ans.get(i) + " ");
        }
    }
    else 
    {
        System.out.println("NO");
    }
}
  
// Driver code
public static void main(String args[])
{
    int n = 10, k = 3;
      
    getArrayOfSizeK(n, k);
}
}
  
// This code is contributed by Surendra_Gangwar


Python3
# Python 3 implementation to find an
# array of size K with all the
# even or odd elements in the array
  
# Function to find the array with
# all the even / odd elements
def getArrayOfSizeK(n, k):
  
    ans = []
  
    # If array could be constructed
    # by adding odd elements
    # we need to find the kth
    # element is odd or even
  
    # if array of odd elements
    # would be the answer then
    # k-1 elements would be 1
  
    # First let's check
    # kth is odd or even
    odd = n - ((k - 1) * 1)
  
    # if last element is also
    # an odd number then
    # we can choose odd
    # elements for our answer
    if (odd > 0
        and odd % 2 != 0):
  
        # Add 1 in the array (k-1) times
        for i in range(k - 1):
            ans.append(1)
  
        # Add last odd element
        ans.append(odd)
  
    # If array of even elements
    # would be the answer then
    # k-1 elements would be 2
    even = n - ((k - 1) * 2)
  
    # if last element is also
    # an even number then
    # we can choose even
    # elements for our answer
    if (even > 0
        and even % 2 == 0
        and len(ans) == 0):
  
        # Add 2 in the array (k-1) times
        for i in range(k - 1):
            ans.append(2)
  
        # Add last even element
        ans.append(even)
  
    # Printing the array
    if (len(ans) > 0):
        for i in range( k):
            print (ans[i], end = " ")
          
    else :
        print ("NO")
  
# Driver Code
if __name__=="__main__":
    n, k = 10, 3
    getArrayOfSizeK(n, k)
  
# This code is contributed by chitranayal


C#
// C# implementation to find an
// array of size K with all the
// even or odd elements in the array
using System;
using System.Collections.Generic;
  
class GFG{
  
// Function to find the array with
// all the even / odd elements
static void getArrayOfSizeK(int n, int k)
{
    List ans = new List();
  
    // If array could be constructed
    // by adding odd elements
    // we need to find the kth
    // element is odd or even
  
    // If array of odd elements
    // would be the answer then
    // k-1 elements would be 1
  
    // First let's check
    // kth is odd or even
    int odd = n - ((k - 1) * 1);
  
    // If last element is also
    // an odd number then
    // we can choose odd
    // elements for our answer
    if (odd > 0 && odd % 2 != 0)
    {
          
        // Add 1 in the array (k-1) times
        for(int i = 0; i < k - 1; i++)
        {
           ans.Add(1);
        }
  
        // Add last odd element
        ans.Add(odd);
    }
  
    // If array of even elements
    // would be the answer then
    // k-1 elements would be 2
    int even = n - ((k - 1) * 2);
  
    // If last element is also
    // an even number then
    // we can choose even
    // elements for our answer
    if (even > 0 && even % 2 == 0 && 
                   ans.Count == 0)
    {
  
        // Add 2 in the array (k-1) times
        for(int i = 0; i < k - 1; i++) 
        {
           ans.Add(2);
        }
  
        // Add last even element
        ans.Add(even);
    }
  
    // Printing the array
    if (ans.Count > 0)
    {
        for(int i = 0; i < k; i++)
        {
           Console.Write(ans[i] + " ");
        }
    }
    else
    {
        Console.WriteLine("NO");
    }
}
  
// Driver code
public static void Main(String []args)
{
    int n = 10, k = 3;
      
    getArrayOfSizeK(n, k);
}
}
  
// This code is contributed by amal kumar choubey


输出:
2 2 6