Beh mi sembra una soluzione ottimale ma ti spiego il perché:
siccome è un estratto di un problema economico l'utente deve scegliere una massimo per a e b o meglio a+b deve essere minore di un certo valore x deciso dall'utente. Per questo ho pensato ad un ciclo for...il while, invece, continuerà all'infinito a provare finchè non trova a e b. La mia macchina invece mi deve dire: guarda, esistono a e b che rispettano le condizioni e tali che a+b sia minore di x; oppure mi deve dire: non esistono a e b che rispettano quelle condizione e tali che a+b sia minore di x (però può darsi che esistano se a+b è maggiore di x, ma non importa perchè l'utente ha deciso che a+b al massimo sia x). Quindi la macchina mi deve dire se esiste la coppia (a,b), e se esiste può esisterne una sola oppure più di una (senza contare quelle ottenute per proporzione). E' qui vabbè ci sta un'altra condizione da dare alla macchina per farle scegliere il valore più grande che ha trovato per a e b che rispettano le condizioni e tali che a+b sia minore di x.
Quindi...posso imporre con il while un lime massimo (sembra un'eresia), per esempio in questo modo:
int i=0,;
int a,A,b,B,c,d,e,x;
while (i==0)
{
c=a+b<x; */ oppure: c=a+b;
c<x; /*
d=(a*A)-(a+b); e=(b*B)-(a+b);
if (d>c)&&(e>c) { i=1; cout<<"">>i; // se scrivo così me li stampa a video? }
else { a++; b++; /ed altre operazioni che vuoi }
}