اینم با ارایه :‌ با فراخوانی تابع subset که دوتا ورودی داره زیر مجموعه های k عضویش رو توی یه ارایه ی دوبعدی به اسم sub میریزه :
#include <iostream>

using namespace std;

int a[1000000] , n , k , c , sub[1000][1000];

void subset(int n ,int k)
{
int g = 0 , h = 0 ;
for(int i = 0 ; i < (1<<n) ; i++)
{
for(int j = 0 ; j <= n ; j++)
{
if( i & (1<<j))
{
C++‎ ;
}
}
if (c == k)
{
g = 0 ;
for(int j = 0 ; j <= n ; j++)
{
if( i & (1<<j))
{
sub[g][h] = a[j] ;
g++ ;
}
}
h++ ;
}
c = 0 ;
}
}
int main()
{
cin >> n ;
for(int i = 0 ; i < n ; i++)
cin >> a[i] ;
cin >> k ;
subset(n,k) ;
return 0;
}


using name space std برای اینه که نیاز نباشه قبل دستورات از std:: استفاده کنیم اگه این رو ننویسیم برنامه به صورت زیر میشه :

int main()
{
std::cin >> n ;
return 0;
}

ولی وقتی اون رو مینویسیم دیگه نیازی نیست std:: بزاریم
برای اطلاعات بیشتر میتونی این رو بخونی :‌ http://www.cplusplus.com/forum/beginner/49748/

">>" این هم یکی از عمگر های بیتوایز (Bitwise operation) در C++‎ هست و برای شیفت دادن ازش استفاده میشه و در مبنای دو کار میکنه به این صورت که اگر مثلا متغیر ما در مبنای دو به صورت 100101 باشد بعد از یکبار شیفت به 001010 تبدیل میشه یعنی اولین عدد از سمت چپ حذف میشه و یک صفر به سمت راست اضافه میشه در نتیجه اگر یک رو که در مبنای دو به صورت 1 هست رو n بار شیفت بدیم به 2 به توان n میرسیم و این هم به همین معناست .