Esercizio duplicati

di il
7 risposte

Esercizio duplicati

Ciao ragazzi, ho un problema con un esercizio
la traccia dice: "se il vettore B contiene la somma tra gli elementi del vettore a[] e a[i+1] allora bisogna inserire nel vettore c la posizione di B in cui si trova questo valore (SE VI È PIU DI UNA INSERIRE UNA QUALSIASI)"
il codice che ho fatto inserisce bene la posizione nel vettore c, la cosa è che se vi sono più di un elemento non riesco a inserirlo solo una volta.
cioè se A: 2 3 6 1 10 e B: 4 3 5 7 5 nel vettore C mi inserisce due volte la posizione del 5 ovvero mi da come risultato 2 3 4
 #include <iostream>
#define DIM 5
using namespace std;
int main()
{
	int a[DIM], b[DIM], c[DIM], i,j, cont,k;
	for (i = 0; i < DIM; i++)
	{
		cin >> a[i];
	}
	for (i = 0; i < DIM; i++)
	{
		cin >> b[i];
	}
	k = 0;
	
	for (j = 0; j < DIM; j++)
	{
		
		for (i=0; i < DIM; i++)
		{
			cont = 0;
			if (b[j] == (a[i]+a[i+1]))
			{
				cont=1;
			}
			
			
		}
		if (cont  ==1)
		{
			c[k] = j;
			k++;
		}
		
		
	}
	return 0;

7 Risposte

  • Re: Esercizio duplicati

    Penso che i vettori b e c debbano fermarsi un valore in meno di a, altrimenti b[DIM - 1] devi controllare se contiene a[DIM - 1] + a[DIM] e quest'ultimo non esiste.
    
    cont = 0;
    for (i=0; i < DIM - 1; i++)
    {
    	if (b[i] == (a[i]+a[i+1]))
    	{
    		cont++;
    		c[cont] = i;
    	}
    } 
    
  • Re: Esercizio duplicati

    Per evitare che uscisse fuori dal vettore ho inserito un if, ma non va
     k = 0;
    	
    	for (j = 0; j < DIM; j++)
    	{
    		
    		for (i=0; i < DIM; i++)
    		{
    			cont = 0;
    			if (i + 1 <= 4)
    			{
    				if (b[j] == (a[i] + a[i + 1]))
    				{
    					cont++;
    					
    				}
    				
    			}
    		}
    		if (cont <= 1)
    		{
    			c[k] = j;
    			k++;
    		}
    		
    		
    	}
    	return 0;
    }
  • Re: Esercizio duplicati

    Scusa ma penso di non aver ben compreso la traccia. Per ogni a(i) devi cercare a(i) + a(i+1) in tutto b o solo in b(i)?

    Comunque ribadisco che se ti devi fermare a un elemento prima, metti la condizione dim-1 direttamente nel for e ti risparmi un if.
  • Re: Esercizio duplicati

    Tutto il vettore b
  • Re: Esercizio duplicati

    Ok.
    il problema è che in c(k) memorizzi sempre l'ultimo valore di j.
    Il secondo for dovrebbe bloccarsi non appena trova uno dei valori cercati.
    
    for (j = 0; j < DIM - 1; j++)
    	{
    		
    		for (i=0; (i < DIM) && (cont==0) ; i++)
    		{
    			cont = 0;
    			if (b[i] == (a[j]+a[j+1]))
    			{
    				cont=1;
    			}
    			
    			
    		}
    		if (cont  ==1)
    		{
    			c[k] = i;
    			k++;
    		}
    		
    		
    	}
    
    Hai anche scambiato gli indici i e j negli if.
  • Re: Esercizio duplicati

    Non va
  • Re: Esercizio duplicati

    Scrivi bene la traccia. Così come è scritta non vuol dir nulla, di conseguenza è dura dare indicazioni
Devi accedere o registrarti per scrivere nel forum
7 risposte