/*
  Dato un array di N numeri interi tra 0 e 9 si considerino tutte le
  coppie composte da due occorrenze consecutive nelle posizioni dell'array .
  Quale è la coppia più frequente? E la meno frequente?
  Esempio: N=10
  Array= ( 1,2,3,5,3,6,2,6,3,4,).
  Le coppie sono: (1,2),(2,3),(3,5),(5,3),(3,6),(6,2),(2,6),(6,3),(3,4).
  Esse sono tutte egualemnte frequenti.
*/

import javax.swing.JOptionPane;
class ExArray_04 {
  public static void main(String[] args) {
    int N;
    N = Integer.parseInt(JOptionPane.showInputDialog("Numero di elementi dell'Array?"));
    int[] Array = new int[N];
    int[] Statx = new int[100];
    
    //riempie l'Array di numeri casuali
      for (int i=0; i<Array.length; Array[i++] = (int) (Math.random() * 10));
        
    /*
      Incrementa gli elementi di Statx che corrispondono alle coppie di elementi consec. di Array.
      SPIEGAZIONE:
      In pratica gli elementi di Statx rappresentano tutte le possibili combinazioni di coppie
      ottenute con numeri da 0 a 9. Per cui gli elementi di Statx si possono considerare:
        0  -> 0,0        1 -> 0,1        2 -> 0,2 ...
        10 -> 1,0       11 -> 1,1       12 -> 1,2 ...
        97 -> 9,7       98 -> 9,8       99 -> 9,9
      Per cui, ad esempio se esce 2 volte la coppia (2,7) si andrà ad incrementare per 2 volte
      l'elemento 27 di Statx[]. Alla fine basterà guardare il numero più alto e più basso
      presenti dentro Statx[] e gli indici corrispondenti a quei numeri, saranno rispettivamente
      la coppia più frequente e meno frequente.
      (Es: Se il numero più alto, ad esempio 5, è stato trovato nell'indice 8 vuol dire che la
       coppia (0,8) è uscita per 5 volte).
    */
      for (int i=0; i<Array.length-1; i++)
        Statx[(Array[i]*10)+Array[i+1]]++;
    
    //conta max e min frequenza
      int max=0,        
          min=100,      //parto dal massimo
          itemmax=0,    //salva l'indice dove si è trovato il massimo
          itemmin=0;    //  "       "      "   "      "     " minimo
      
      for (int i=0; i<100; i++) {
        if (max<Statx[i]) {max = Statx[i]; itemmax = i;}
        //il minimo si considera per almeno 2 occorrenze (infatti 1 occorrenza è la normale frequenza)
        if (min>Statx[i] && Statx[i]>1) {min = Statx[i]; itemmin = i;}
      }
      
      //Se non c'è stata nessuna coppia minima che si sia ripetuta per almeno 2 volte...
      if (min==100) min=1;      //assumi come minimo 1
        
    //risultati...
      if (max>1)
          System.out.println("\nMAX: La coppia (" + itemmax/10 + ", " + itemmax%10 +") si ripete per " + max + "volte. ");
      
      if (min>1)
          System.out.println("MIN: La coppia (" + itemmin/10 + ", " + itemmin%10 +") si ripete per " + min + "volte. ");
      
      if (max==1 && min==1)
          System.out.println("Tutte le coppie sono egualmente frequenti");
      else if (max == min)
          System.out.println("Una sola coppia di numeri si ripetuta piu' volte!");
      
      System.out.println("\nEcco le coppie estratte:");
      for (int i=0; i<Array.length-1; i++) System.out.print("("+Array[i]+", "+Array[i+1]+")");
      System.out.println();
      
    System.exit(0);             
  
  }
}