Matrice numeri pseudocasuali visualizzare il massimo ed il secondo massimo

di Anonimizzato31024 il
7 risposte
#include<iostream>
#include<ctime>
#include<cstdlib>
#define dim 100
using namespace std;
int main()
{
    int i,j,max,max2,v[dim][dim],temp=0;
    srand(time(NULL));
    for(i=0;i<dim;i++)
    {
        for(j=0;j<dim;j++)
        {
            v[i][j]=rand()%101;
            cout<<" "<<v[i][j];
        }
        cout<<endl;
    }
    max=v[0][0];
    max2=v[0][0];
    for(i=0;i<dim;i++)
    {

        for(j=0;j<dim;j++)
        {
            if(max2<v[i][j])
            {
                temp=v[i][j];
                v[i][j]=max2;
                max2=temp;


            }
            if(max<max2)
            {
                temp=max2;
                max2=max;
                max=temp;

            }

            if(max==max2)
            {
                max2=max-v[i][j];

            }
        }
    }
   cout<<"il massimo e' "<<max<<endl;
        cout<<"il secondo massimo e' "<<max2;




}

7 Risposte

  • A parte il fatto che il codice va formattato utilizzando il pulsante "</>", qual'è la domanda?
  • Ok formattato spero risolto. Grazie.
    La mia domanda :
    1 Il codice potrebbe andare bene cosi? Si potrebbe fare in modo più semplice.
    2 if(max2==max)
    {
    max2=max-v[j]; per evitare la ripetizione del secondo massimo
    }
    Tutto questo che ho fatto HA SENSO!?!?! ( o semplicemte fortuna )
  • Ciao, il fodice non lo hai formattato.
    Vai in modifica, elimina la riga vuota formattata, seleziona il codice e premi il pulsante di formattazione.
    Devi avere i TAG BBCODE prima e dopo la selezione da formattare
  • Ok scusa , ora va meglio.
  • #include <iostream>
    #include <ctime>
    #include <cstdlib>
    
    using namespace std;
    
    const int N = 5;
    
    int main()
    {
        srand(time(0));
        int v[N][N];
        for(int i = 0; i < N; ++i)
        {
            for(int j = 0; j < N; ++j)
            {
                v[i][j] = rand() % 10;
                cout << v[i][j] << "\t";
            }
            cout << endl;
        }
        int *p = v[0];
        int max1 = 0;
        int max2 = 0;
        for(int i = 0; i < N * N; ++i)
        {
            if(max1 < p[i])
            {
                max1 = p[i];
            }
            if(max2 < p[i] && p[i] < max1)
            {
                max2 = p[i];
            }
        }
        cout << endl << "max1: " << max1;
        cout << endl << "max2: " << max2 << endl;
    }
    Come avevi fatto tu non andava bene.
  • Ho visto il codice di nippolo delle 19.05, secondo me c’è un problema

    Direi che ha un punto debole, quando il secondo elemento viene a trovarsi prima dell’elemento massimo.

    Per capirci, faccio un esempio rapido
    V[0][0]=100
    V[0][1]=101

    Diciamo che non funziona ( se ho visto bene ) se quando il ciclo passa su quello che dovrebbe essere il secondo numero in quel momento quel valore è assegnato al max.
  • dobby ha scritto:


    Ho visto il codice di nippolo delle 19.05, secondo me c’è un problema
    Hai ragione, non ci avevo riflettuto più di tanto.
    Così penso dovrebbe andar bene:
    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    
    using namespace std;
    
    const int N = 10;
    
    int main()
    {
        srand(time(0));
        int v[N];
        int max1 = -1;
        int max2 = -1;
        for(int i = 0; i < N; ++i)
        {
            cout << (v[i] = rand() % 101) << " ";
        }
        for(int i = 0; i < N; ++i)
        {
            if(max1 < v[i])
            {
                max2 = max1;
                max1 = v[i];
            }
            else if(max2 < v[i] && max1 != v[i])
            {
                max2 = v[i];
            }
        }
        if(max2 == -1)
        {
            max2 = *v;
        }
        cout << endl << endl << "max1: " << max1;
        cout << endl << "max2: " << max2 << endl;
    }
    Sei d'accordo?
Devi accedere o registrarti per scrivere nel forum
7 risposte