Se fai un'obiezione del genere all'esame ti bocciano
L'analisi alla fine del ciclo la fai quando sei fuori dal for.
Quindi al limite, per ottimizzare, puoi fare
for (i = 0; i < DIM - b; i++)
{
if (a[i] == a[i + b])
{
cont++;
}
temp = a[i];
a[i] = a[i + b];
a[i + b] = temp;
}
if (cont)
t = 1;
Che comunque ai fini pratici è equivalente a quanto scritto prima: se t è già uguale a uno, risettarlo a uno cosa cambia?
E comunque sì: una tra cont e t è una variabile inutile. Ma sembra inutile anche il resto del codice. Cosa avresti dovuto fare, per la cronaca?