2020年4月16日
今天在刷题的时候,做到这样的一道题:

我一开始给出的解法是这样的:
#include <bits/stdc++.h>
void update(int *a,int *b) {
// Complete this function
(*a) = (*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;
}
编译能过,但是WA。当时我百思不得其解,到底是哪里错了呢?后来我看了其他人的解法之后发现,是(* a)的值在经过了第一条语句之后已经改变了,所以需要一个变量来存放(* a)的初始值。顿时觉得自己太憨了,所以记录一下,提醒自己以后要多注意这个问题。以下是修正后的代码:
#include <bits/stdc++.h>
void update(int *a,int *b) {
// Complete this function
int temp = (*a);
(*a) = (*a) + (*b);
(*b) = abs(temp-(*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;
}
还从这次犯傻经历中学到,以后再出现类似问题,纠结10分钟无果后,及时去参考其他人的代码,说不定能给自己启发。同时,看其他人的解法,也有利于扩展思路,就像我是用abs函数来计算绝对值,但也有人用if来输出相反数。对数组的逆序输出,我是用reverse函数,但也有人是用容器、两个for循环(++、--)来输出。