#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
const int N=9;
int tb[N]={};
void print(int t[])
{
for(int i=0;i<N;i++)
cout<<t[i]<<" ";
cout<<"\n";
}
void create(int t[])
{
srand(time(NULL));
for(int i=0;i<N;i++)
t[i]=0+rand()%20;
}
int dwa(int t[],int t2[])
{
int l=0,a,s=0;
for(int i=0;i<N;i++)
{
a=t[i];
l=0;
while(a>0)
{
if(a%2==1)
{
l++;
a=a/2;
}else a=a/2;
}
t2[i]=l;
}
for(int i=0;i<N;i++)
s=s+t2[i];
return s;
}
void zeruj(int t[])
{
for (int i=0;i<N;i++)
t[i]=0;
}
int podzbior (int t[], int t2[],int n,int i)
{
if(i>N)return 0 ;
else{
if(n==0)
{
cout<<"[";
for(int j=0;j<N;j++)
if(tb[j]!=0)
cout<<tb[j]<<" ";
cout<<"]\n";
zeruj(t);
return 0;
}else
{
{tb[i]=t[i];
return podzbior(t,t2,n-t2[i],i+1) || podzbior(t,t2,n,i+1);
tb[i]=0;}
}
}
// return ;
}
int main()
{
int t[N];
int t2[N];
create(t);
print(t);
cout<<dwa(t,t2)<<"\n";
if(dwa(t,t2)%3==0)
podzbior(t,t2,dwa(t,t2)/3,0);
else cout<<"PODZIAL NIE ISTNIEJE\n";
cout<<"\n";
print(t2);
cout<<"\n";
system("PAUSE");
}
Dany jest zbiór n liczb naturalnych umieszczony w tablicy typu tab=array[1..n] of integer.
Proszę napisać funkcję, która zwraca informację, czy jest możliwy podział zbioru n liczb na trzy
podzbiory, tak aby w każdym podzbiorze, łączna liczba jedynek użyta do zapisu elementów tego
podzbioru w systemie dwójkowym była jednakowa. Na przykład:
{2,3,5,7,15} -> true, bo podzbiory {2,7} {3,5} {15} wymagają użycia 4 jedynek,
{5,7,15} -> false, podział nie istnieje.
może ktoś napisać dlaczego program nie wypisuje wszystkich możliwości ??
dodanie znacznika <code class="cpp"> - fp