Problématique: Entrée: 4 entiers M, x, y, z où 100,000 <= M <= 1,000,000
et -500 <= x, y, z <= 500
. Nous voulons continuellement multiplier les carrés de ces nombres jusqu'à atteindre un nombre supérieur à M et imprimer ce nombre. Par exemple, si M = 100 000 et x = 2, y = 3, z = 4, puisTrouve le premier nombre supérieur à M résultant de la multiplication continue de 3 entiers
2^2 * 3^2 * 4^2 * 2^2 * 3^2 * 4^2 = 331,776
Voici ma tentative:
int M, x, y, z, xs, ys, zs, prod_square;
scanf("%d%d%d%d", &M, &x, &y, &z);
if (x == 1 && y == 1 && z == 1) {
printf("Poor input!\n");
return 0;
}
if (x == 0 || y == 0 || z == 0) {
printf("Poor input!\n");
return 0;
}
xs = x*x; ys = y*y; zs = z*z;
if (xs > M) printf("%d\n", xs);
else if (xs*ys > M) printf("%d\n", xs*ys);
else if (xs*ys*zs > M) printf("%d\n", xs*ys*zs);
else {
prod_square = xs*ys*zs;
double temp = (log(M))/(log(prod_square));
int n = (int)temp;
int result = pow(prod_square, n);
int try1 = result * xs;
int try2 = result * xs * ys;
if (try1 > M) printf("%d\n", try1);
else if (try2 > M) printf("%d\n", try2);
}
Cela fonctionne pour beaucoup d'intrants, mais donne la mauvaise réponse pour certains cas de bord. Malheureusement, je n'ai pas accès aux données de test.
Un problème peut être un débordement, mais mes instructions if doivent l'intercepter.
* « certains cas limites » * - Quels sont les cas de pointe? –
Je n'ai pas accès aux données de test sur le juge, tout ce que je reçois est "Mauvaise réponse!". C'est un problème de pratique sur un site web de juge. Cela fonctionne pour les cas que j'ai essayés mais je ne peux pas penser à des cas pour lesquels cela ne fonctionne pas. – user6005857
si l'une des entrées est '0' vous êtes en train d'imprimer comme une mauvaise entrée et continuez à la place, vous devez retourner une valeur – rakesh