#include <stdio.h>
#include <cmath>
void update(int *a,int *b) {
// Complete this function
(*a) = abs(*a + *b);
(*b) = abs(*a - *b);
}
int main() {
int a, b;
int *pa = &a, *pb = &b;
scanf("%d %d", &a, &b);
update(pa, pb);
printf("%d\n%d", a, b);
return 0;
}
I have the following code (from HackerRank C++ problems). If I have 4 and 5 as input it will return 9 and 4 as output rather than 9 and 1. I thought it will go 4 - 5 = abs(-1) = 1. Why does it not work like that?
4 Réponses :
Vous avez réaffecté * A code> sur la première ligne et il utilise cette nouvelle valeur sur la deuxième ligne. Vous aurez besoin d'une temporaire pour éviter que, par exemple: std::tie(*a, *b) = std::make_tuple(abs(*a + *b), abs(*a - *b));
Origa ... sonne comme le prochain challenger pour la couronne de Gojira.
Si vous voulez le faire sans utiliser une variable temporaire, vous pouvez faire comme suit:
void update(int *a, int *b) {
// Complete this function
(*a) = abs(*a + *b);
(*b) = abs(*a - *b -*b);
}
Cela n'est pas équivalent en raison de différents cas de trop-plein et vraiment une mauvaise idée juste du point de vue de la clarté, même si ce n'est pour cela.
Utilisez plutôt ce code car il est simple. Si la valeur de B est négative après la soustraction. Nous venons de multiplier par -1.
int origa = *a;
*a = origa + *b;
*b = origa - *b;
if (*b <0)
{
*b=-1*(*b);
}
"a" obtient une nouvelle valeur après exécution (* a) = ABS (* A + * B); code>, donc maintenant "B" obtient la dernière valeur de "A", c'est pourquoi il donne 4 au lieu de 1 (A = 4 + 5 = 9, B = 9-5 = 4). Donc, déclarez une variable temporaire de l'utiliser pour les deux et b comme celui-ci. int temp=*a;
*a = temp+*b;
*b = abs(temp-*b);
Lorsque cette ligne
(* b) = ABS (* A - * B); code> exécute, quelle est la valeur de* A code>?Pourquoi avez-vous besoin d'utiliser des pointeurs? On dirait une overcilleuse pour moi.
Vous devriez commencer à utiliser un débogueur, vous verrez immédiatement la réponse à la question de Blaze et de comprendre votre problème.
Vous faites l'erreur que les débutants que font parfois, qu'un programme est un groupe d'équations décrivant un problème à résoudre. Toutefois, dans la plupart des langues, un programme est vraiment une série d'instructions exécutées dans une commande donnée pour résoudre un problème. Donc, dans votre cas, l'erreur est que vous n'avez pas réalisé que l'exécution de la première «équation» a changé la signification de la seconde.