Salve a tutti gente, avrei bisogno di sapere come si risolve questo esercizio
è un esercizio d'esame
ecco il testo:
Scrivere una funzione C++ che dato un array a due dimensioni N x N di interi a, un intero n>=1 ed un intero k, restituisce TRUE se e solo se in ogni colonna esistono n coppie distinte di elementi la cui somma sia pari a k.
esempio per
n=2
e
k=5
se abbiamo in una colonna
3
1
2
4
0
6
allora restituisce true
se invece
3
1
2
2
6
restituisce false perchè le due coppie (3,2) e (3,2) hanno in comune il 3 quindi non sono distinte
se fosse
3
1
2
2
3
restituisce true
se invece
3
1
2
4
0
6
5
restituisce false perchè le coppie sono 3
ecco qui il programma incompleto
c'è un errore che non riesco a risolvere
#include<iostream>
using namespace std;
const int N=5;
bool verifica_coppia(int [N][N], int , int, int);
bool condizione(int [N][N], int, int);
int main()
{
int k,n;
int a[N][N]={{3,1,2,2,3},{3,1,2,2,3},{3,1,2,2,3},{3,1,2,2,3},{3,1,2,2,3}};
cout<<"Inserisci un numero(somma degli elementi della coppia ";
cin>>k;
cout<<"Inserisci un numero(numero di elementi della coppia) ";
cin>>n;
cout<<condizione(a,k,n);
return 0;
}
bool verifica_coppia(int y[N][N], int b,int numero,int c)
{
int i,j;
bool trovata=false;
int cont=0;
bool visitato[N];
for(i=0;i<N;i++){
visitato[i]=false;
}
i=0;
while(i<N && !trovata)
{
if(!visitato[i])
j=i+1;
int b=0;
while(j<N)
{
if(y[i][c]==y[j][c])
{
visitato[j]=true;
}
if((y[i][c]+y[j][c])==b)
{
visitato[j]=true;
b=1;
}
j++;
}
cont+=b;
i++;
if(cont==numero)
trovata=true;
}
return trovata;
}
bool condizione(int x[N][N],int r,int val)
{
int s=0;
bool condition=true;
while(s<N && condition)
{
condition=verifica_coppia(x,r,val,s);
if(condition)
{
s++;
cout<<"La condizione è verificata"<<endl;
}
else
{
cout<<"La condizione NON è verificata"<<endl;
}
}
return condition;
}