PROBLEMA VETTORI, multipli di 11, C++

Alex7337
Salve ragazzi, sto lottando con questo problema che proprio non mi riesce:
in pratica devo inserire in automatico in un vettore tutti i numeri da 1 a 100 tranne i multipli di 11...
ora può sembrare facile, ma sto riscontrando varie difficoltà...
Questo è il codice che ho scritto, ma mi duplica dei numeri per ovvie ragioni... ma non trovo altri modi per risolverlo...
il vostro aiuto è gradito! GRAZIE
#include <iostream>

using namespace std;

int main()
{
    int vet[100];
    
    for(int i=0; i<100; i++){

        if((i+1)%11!=0){
             
        vet[i]=i+1;
            
        }else if(i+1)%11==0){
        
            vet[i]=i+2;
        }
       cout<<vet[i]<<endl;
        
    }
    
        
    return 0;
}

Risposte
oleg.fresi
Ecco a te! Questa è la mia soluzione, se c'è qualcuno che ha un'idea migliore la proponga.
Il problema è che la prima if non sa se l'altra è stata valutata come true, quindi esegue comunque il suo lavoro stampandoti lo stesso numero d prima.
int main()
{
	int vet[100];

	for (int i = 0; i<100;) {

		if (((i + 1) % 11 != 0)) 
		{
			vet[i] = i + 1;
			cout << vet[i] << endl;
			i++;
		}
		else if ((i + 1) % 11 == 0)
		{
		   vet[i] = i + 2;
		   cout << vet[i] << endl;
		   i += 2;
		}
		
	}


Alex7337
ZfreS grazie mille per la spiegazione!

Super Squirrel
Prova a lanciare il seguente codice basato sulla risposta di @ZfreS
#include <iostream>

using namespace std;

int main()
{
    int vet[100];
    for(int i = 0; i < 100;)
    {
        if(((i + 1) % 11 != 0))
        {
            vet[i] = i + 1;
            i++;
        }
        else if((i + 1) % 11 == 0)
        {
            vet[i] = i + 2;
            i += 2;
        }
    }
    for(int i = 0; i < 100; i++)
    {
        cout << vet[i] << endl;
    }
}

L'output ti sembra accettabile?

Io cmq avrei fatto qualcosa del genere:
#include <iostream>

using namespace std;

int main()
{
    int v[100];
    unsigned int dim = 0;
    unsigned int i;
    for(i = 1; i <= 100; ++i)
    {
        if(i % 11)
        {
            v[dim++] = i;
        }
    }
    for(i = 0; i < dim; ++i)
    {
        cout << v[i] << endl;
    }
}

oleg.fresi
Non capisco perchè da quel problema. Comunque la tua soluzione è più semplice, più smart.

vict85
Ovviamente si può eliminare l'operazione di modulo usando 2 cicli e la dimensione finale può essere calcolata a priori (è 91).

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.