lucas87
29-01-2007, 10:02
L'esercizio è il seguente:
Scrivere una funzione (iterativa) che calcoli il numero di coppie (i,j) tali che
A[i]+B[j]>0 per due vettori A e B.
Sembra una stronzata e infatti lo è!!!
Di seguito è postata la soluzione.
Ma ora c'è da fare una piccola variazione. Ipotizzare che i 2 vettori A e B siano ordinati e sfruttare il fatto che siano ordinati per creare un algoritmo piu efficiente.
Come si puo fare?
Soluzione senza ipotizzare che i vettori siano ordinati:
#include<stdio.h>
#include<stdlib.h>
void leggi_array(int *, int );
int cnt_coppie(int *, int *, int, int);
int main(void){
int dim1,dim2;
printf("Immetti la dimensione del primo Array:");
scanf("%d",&dim1);
int v1[dim1];
printf("Immetti la dimensione del secondo Array:");
scanf("%d",&dim2);
int v2[dim2];
printf("caricamento primo vettore\n");
leggi_array(v1,dim1);
printf("caricamento secondo vettore\n");
leggi_array(v2,dim2);
printf("numero di coppie la cui somma e' maggiore di 0 e' = %d\n",cnt_coppie(v1,v2,dim1,dim2));
system("PAUSE");
}
int cnt_coppie(int *t1,int *t2, int dim1, int dim2){
int i,j,cnt;
cnt=0;
for (i=0;i<dim1;++i){
for (j=0;j<dim2;++j){
if ((t1[i]+t2[j])>0) ++cnt;
}
}
return cnt;
}
void leggi_array(int *t, int d){
int i;
for(i=0;i<d;i++){
printf("Immetti t[%d]= ",i);
scanf("%d",&t[i]);
}
}
Scrivere una funzione (iterativa) che calcoli il numero di coppie (i,j) tali che
A[i]+B[j]>0 per due vettori A e B.
Sembra una stronzata e infatti lo è!!!
Di seguito è postata la soluzione.
Ma ora c'è da fare una piccola variazione. Ipotizzare che i 2 vettori A e B siano ordinati e sfruttare il fatto che siano ordinati per creare un algoritmo piu efficiente.
Come si puo fare?
Soluzione senza ipotizzare che i vettori siano ordinati:
#include<stdio.h>
#include<stdlib.h>
void leggi_array(int *, int );
int cnt_coppie(int *, int *, int, int);
int main(void){
int dim1,dim2;
printf("Immetti la dimensione del primo Array:");
scanf("%d",&dim1);
int v1[dim1];
printf("Immetti la dimensione del secondo Array:");
scanf("%d",&dim2);
int v2[dim2];
printf("caricamento primo vettore\n");
leggi_array(v1,dim1);
printf("caricamento secondo vettore\n");
leggi_array(v2,dim2);
printf("numero di coppie la cui somma e' maggiore di 0 e' = %d\n",cnt_coppie(v1,v2,dim1,dim2));
system("PAUSE");
}
int cnt_coppie(int *t1,int *t2, int dim1, int dim2){
int i,j,cnt;
cnt=0;
for (i=0;i<dim1;++i){
for (j=0;j<dim2;++j){
if ((t1[i]+t2[j])>0) ++cnt;
}
}
return cnt;
}
void leggi_array(int *t, int d){
int i;
for(i=0;i<d;i++){
printf("Immetti t[%d]= ",i);
scanf("%d",&t[i]);
}
}