本文概述
- C ++
- Java
- Python3
- C#
- 的PHP
例子:
Input: arr[] = {1, 2, 3, 4}
r = 2
Output :1 2
1 3
1 4
2 3
2 4
3 4Input: arr[] = {10, 20, 30, 40, 50}
r = 3
Output : 10 20 30
10 20 40
10 20 50
10 30 40
10 30 50
10 40 50
20 30 40
20 30 50
20 40 50
30 40 50
这个问题和在大小为n的给定数组中打印r元素的所有可能组合.
这里的想法类似于子集总和问题。我们一个接一个地考虑输入数组的每个元素, 然后重复两种情况:
1)元素包含在当前组合中(我们将元素放入data []中, 并在data []中增加下一个可用索引)
2)当前组合中不包含该元素(我们不放置该元素并且不更改索引)
当data []中的元素数等于r(组合的大小)时, 我们将其打印出来。
该方法主要基于帕斯卡的身份, 即?C[R= n-1C[R+ n-1C1一
C ++
//Program to print all combination of size r in
//an array of size n
#include <
stdio.h>
void combinationUtil( int arr[], int n, int r, int index, int data[], int i);
//The main function that prints all combinations of
//size r in arr[] of size n. This function mainly
//uses combinationUtil()
void printCombination( int arr[], int n, int r)
{
//A temporary array to store all combination
//one by one
int data[r];
//Print all combination using temprary array 'data[]'
combinationUtil(arr, n, r, 0, data, 0);
}/* arr[]--->
Input Array
n--->
Size of input array
r--->
Size of a combination to be printed
index--->
Current index in data[]
data[] --->
Temporary array to store current combination
i--->
index of current element in arr[]*/
void combinationUtil( int arr[], int n, int r, int index, int data[], int i)
{
//Current cobination is ready, print it
if (index == r) {
for ( int j = 0;
j <
r;
j++)
printf ( "%d " , data[j]);
printf ( "\n" );
return ;
}//When no more elements are there to put in data[]
if (i>
= n)
return ;
//current is included, put next at next location
data[index] = arr[i];
combinationUtil(arr, n, r, index + 1, data, i + 1);
//current is excluded, replace it with next
//(Note that i+1 is passed, but index is not
//changed)
combinationUtil(arr, n, r, index, data, i + 1);
}//Driver program to test above functions
int main()
{
int arr[] = { 10, 20, 30, 40, 50 };
int r = 3;
int n = sizeof (arr) /sizeof (arr[0]);
printCombination(arr, n, r);
return 0;
}
Java
//Java program to print all combination of size
//r in an array of size n
import java.io.*;
class Permutation {/* arr[]--->
Input Array
data[] --->
Temporary array to store current combination
start &
end --->
Staring and Ending indexes in arr[]
index--->
Current index in data[]
r --->
Size of a combination to be printed */
static void combinationUtil( int arr[], int n, int r, int index, int data[], int i)
{
//Current combination is ready to be printed, //print it
if (index == r) {
for ( int j = 0 ;
j <
r;
j++)
System.out.print(data[j] + " " );
System.out.println( "" );
return ;
}//When no more elements are there to put in data[]
if (i>
= n)
return ;
//current is included, put next at next
//location
data[index] = arr[i];
combinationUtil(arr, n, r, index + 1 , data, i + 1 );
//current is excluded, replace it with
//next (Note that i+1 is passed, but
//index is not changed)
combinationUtil(arr, n, r, index, data, i + 1 );
}//The main function that prints all combinations
//of size r in arr[] of size n. This function
//mainly uses combinationUtil()
static void printCombination( int arr[], int n, int r)
{
//A temporary array to store all combination
//one by one
int data[] = new int [r];
//Print all combination using temprary
//array 'data[]'
combinationUtil(arr, n, r, 0 , data, 0 );
}/* Driver function to check for above function */
public static void main(String[] args)
{
int arr[] = { 10 , 20 , 30 , 40 , 50 };
int r = 3 ;
int n = arr.length;
printCombination(arr, n, r);
}
}
/* This code is contributed by Devesh Agrawal */
Python3
# Python program to print all
# subset combination of n
# element in given set of r element .# arr[] --->
Input Array
# data[] --->
Temporary array to
#store current combination
# start &
end --->
Staring and Ending
#indexes in arr[]
# index --->
Current index in data[]
# r --->
Size of a combination
#to be printed
def combinationUtil(arr, n, r, index, data, i):
# Current combination is
# ready to be printed, # print it
if (index = = r):
for j in range (r):
print (data[j], end = " " )
print ( " " )
return# When no more elements
# are there to put in data[]
if (i>
= n):
return# current is included, # put next at next
# location
data[index] = arr[i]
combinationUtil(arr, n, r, index + 1 , data, i + 1 )# current is excluded, # replace it with
# next (Note that i+1
# is passed, but index
# is not changed)
combinationUtil(arr, n, r, index, data, i + 1 )# The main function that
# prints all combinations
# of size r in arr[] of
# size n. This function
# mainly uses combinationUtil()
def printcombination(arr, n, r):# A temporary array to
# store all combination
# one by one
data = https://www.lsbin.com/list ( range (r))# Print all combination
# using temporary
# array'data[]'
combinationUtil(arr, n, r, 0 , data, 0 )# Driver Code
arr = [ 10 , 20 , 30 , 40 , 50 ]r = 3
n = len (arr)
printcombination(arr, n, r)# This code is contributed
# by Ambuj sahu
C#
//C# program to print all combination
//of size r in an array of size n
using System;
class GFG {/* arr[] --->
Input Array
data[] --->
Temporary array to store
current combination start &
end --->
Staring and Ending indexes in arr[]
index --->
Current index in data[]
r --->
Size of a combination to be
printed */
static void combinationUtil( int []arr, int n, int r, int index, int []data, int i)
{//Current combination is ready to
//be printed, print it
if (index == r)
{
for ( int j = 0;
j <
r;
j++)
Console.Write(data[j] + " " );
Console.WriteLine( "" );
return ;
}//When no more elements are there
//to put in data[]
if (i>
= n)
return ;
//current is included, put next
//at next location
data[index] = arr[i];
combinationUtil(arr, n, r, index + 1, data, i + 1);
//current is excluded, replace
//it with next (Note that i+1
//is passed, but index is not
//changed)
combinationUtil(arr, n, r, index, data, i + 1);
}//The main function that prints all
//combinations of size r in arr[] of
//size n. This function mainly uses
//combinationUtil()
static void printCombination( int []arr, int n, int r)
{//A temporary array to store all
//combination one by one
int []data = https://www.lsbin.com/new int [r];
//Print all combination using
//temprary array'data[]'
combinationUtil(arr, n, r, 0, data, 0);
}/* Driver function to check for
above function */
public static void Main()
{
int []arr = { 10, 20, 30, 40, 50 };
int r = 3;
int n = arr.Length;
printCombination(arr, n, r);
}
}//This code is contributed by vt_m.
的PHP
<
?php
//Program to print all combination of
//size r in an array of size n//The main function that prints all
//combinations of size r in arr[] of
//size n. This function mainly uses
//combinationUtil()
function printCombination( $arr , $n , $r )
{
//A temporary array to store all
//combination one by one
$data = https://www.lsbin.com/array ();
//Print all combination using
//temprary array'data[]'
combinationUtil( $arr , $n , $r , 0, $data , 0);
}/* arr[] --->
Input Array
n --->
Size of input array
r --->
Size of a combination to be printed
index --->
Current index in data[]
data[] --->
Temporary array to store
current combination
i --->
index of current element in arr[] */
function combinationUtil( $arr , $n , $r , $index , $data , $i )
{
//Current cobination is ready, print it
if ( $index == $r ) {
for ( $j = 0;
$j <
$r ;
$j ++)
echo $data [ $j ], " " ;
echo "\n" ;
return ;
}//When no more elements are there to
//put in data[]
if ( $i>
= $n )
return ;
//current is included, put next at
//next location
$data [ $index ] = $arr [ $i ];
combinationUtil( $arr , $n , $r , $index + 1, $data , $i + 1);
//current is excluded, replace it with
//next (Note that i+1 is passed, but
//index is not changed)
combinationUtil( $arr , $n , $r , $index , $data , $i + 1);
}//Driver program to test above functions
$arr = array ( 10, 20, 30, 40, 50 );
$r = 3;
$n = count ( $arr );
printCombination( $arr , $n , $r );
//This code is contributed by anuj_67.
?>
输出如下:
10 20 30
10 20 40
10 20 50
10 30 40
10 30 50
10 40 50
20 30 40
20 30 50
20 40 50
30 40 50
请参阅下面的文章以获取更多解决方案和想法, 以处理输入数组中的重复项。
在大小为n的给定数组中打印r元素的所有可能组合
【算法题(打印一组给定大小的所有子集)】如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。
推荐阅读
- 设计模式(2021年软件开发人员必须具备的技能)
- 算法题(最长子数组,元素总和不超过k)
- WinXP鲜为人知的超级技巧揭秘
- XP系统常用的710招技巧
- WinXP系统优化加速办法
- WinXP系统自动切换IP设置图文详细教程
- 维护XP系统安全必须遵守的13条法则
- 技巧Windows XP系统自带的隐藏文件
- 菜鸟未知6109个经典电脑小技巧