Algunos de los ejercicios del tema 2 te han quedado muy largos y poco simples, suponiendo que sean correctos, puesto que no los he mirado todos. Te pongo soluciones alternativas más cortas y simples, por lo menos a mi parecer.
Código
//Problema 1 #include <iostream> using namespace std; int main() { int n; cin >> n; for (int i = 1; i <= n; ++i) { cout << string(n - i, ' '); for (int j = 0; j + 1 < i; ++j) cout << "* "; cout << "*" << endl; } } //Problema 2 #include <iostream> using namespace std; void imprime(int n, int i) { if (i == 1) cout << n%10 << endl; else if (n/10 == 0) cout << -1 << endl; else imprime(n/10, i - 1); } int main() { int n, i; cin >> n >> i; imprime(n, i); } //Problema 3 #include <iostream> using namespace std; int main() { string s; cin >> s; for (int i = 0; i < s.size() >> 1; ++i) { if (i > 0) cout << ", "; cout << s[i] << " + " << s[s.size() - 1 - i] << " = " << s[i] - '0' + s[s.size() - 1 - i] - '0'; } if (s.size()&1) cout << ((s.size() > 1)?", ":"") << s[s.size()>>1]; cout << endl; } //Problema 4 #include <iostream> using namespace std; int main() { int maxim = 0, act = 0; char c, ant = '0'; while (cin >> c) { if (c >= ant) ++act; else { maxim = max(maxim, act); act = 1; } ant = c; } maxim = max(maxim, act); cout << maxim << endl; } //Problema 6 #include <iostream> using namespace std; int mcd(int a, int b) { if (a == b) return a; return (a > b) ? mcd(a - b, b) : mcd(b - a, a); } int main() { int a, b; cin >> a >> b; cout << mcd(a, b) << endl; }
Muchas gracias por las sugerencias, pero el problema es que estoy haciendo los ejercicios acorde a lo que llevo visto hasta ahora, por lo que, por ejemplo, aún no podría utilizar variables de tipo string. Pero me vienen muy bien tus soluciones para volver a comparar los ejercicios cuando haya dado todo el temario.
Reconozco que mi principal fallo es no saber hacer los algoritmos más cortos y eficientes, pero estoy trabajando en ello (aunque de todas formas solo me piden que funcionen, pero me convendría aprender a simplificar).
gracias!