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

📅  最后修改于: 2021-09-06 06:52:05             🧑  作者: Mango

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

方法:思想是选择最小的偶数或奇数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


Javascript


输出:
2 2 6