[解题报告]【第03题】给定 a 和 b ,交换它们的值并输出 | 四种解法

简介: [解题报告]【第03题】给定 a 和 b ,交换它们的值并输出 | 四种解法

全文目录

 🎁主要知识点

            🍗交换变量——临时变量

            🍗交换变量——算术运算

            🍗交换变量——异或运算

            🍗交换变量——交换输出

 📓课后习题

             面试题 16.01. 交换数字

 📑写在最后

🎁主要知识点

🍗交换变量——临时变量

利用临时变量,交换变量


#include <stdio.h>
int main() {
    int a, b, tmp;
  while (scanf("%d %d", &a, &b) != EOF) {
     tmp = a;    //临时变量保存a
     a = b;    //b给a
     b = tmp;   //将a的值给b
     printf("%d %d\n", a, b);
  }
  return 0;
}

🍗交换变量——算术运算

这种情况要保证a+b不会溢出!!!


#include <stdio.h>
int main() {
    int a, b, tmp;
  while (scanf("%d %d", &a, &b) != EOF) {
  a = a + b;
  b = a - b;
  a = a - b;
     printf("%d %d\n", a, b);
  }
  return 0;
}


🍗交换变量——异或运算

异或运算的特性就是同0异1!真值表如下:


a b a ^ b

0 0  0

1 0  1

0 1  1

1 1  0

#include <stdio.h>
int main() {
    int a, b, tmp;
  while (scanf("%d %d", &a, &b) != EOF) {
  a = a ^ b;
  b = a ^ b;
  a = a ^ b;
     printf("%d %d\n", a, b);
  }
  return 0;
}


🍗交换变量——交换输出

偶尔并不是真的需要交换。


#include <stdio.h>
int main() {
    int a, b, tmp;
  while (scanf("%d %d", &a, &b) != EOF) {
     printf("%d %d\n", b, a);
  }
  return 0;
}


📓课后习题

面试题 16.01. 交换数字

面试题 16.01. 交换数字


编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值。


解题思路


这就是直接利用异或交换就好了0.0

int* swapNumbers(int* numbers, int numbersSize, int* returnSize){
    *returnSize = numbersSize;
    numbers[0] = numbers[0] ^ numbers[1];
    numbers[1] = numbers[0] ^ numbers[1];
    numbers[0] = numbers[0] ^ numbers[1];
    return numbers;
}


相关文章
|
5月前
【题解】NowCoder [编程题] 数组中两个字符串的最小距离
【题解】NowCoder [编程题] 数组中两个字符串的最小距离
54 7
|
6月前
|
存储 算法 Java
数据结构和算法面试题:给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
数据结构和算法面试题:给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
85 0
|
6月前
|
Java
每日一题《剑指offer》数组篇之调整数组顺序使奇数位于偶数前面
每日一题《剑指offer》数组篇之调整数组顺序使奇数位于偶数前面
62 0
每日一题《剑指offer》数组篇之调整数组顺序使奇数位于偶数前面
|
6月前
|
机器学习/深度学习 存储 算法
数据结构与算法面试题:给定非负整数 m 和 n,计算不大于 m 的数字中,素数的个数。(提示:算法原理为埃氏筛、线性筛)
数据结构与算法面试题:给定非负整数 m 和 n,计算不大于 m 的数字中,素数的个数。(提示:算法原理为埃氏筛、线性筛)
87 0
判断一个数是否是对称数(数组/非数组解法)
判断一个数是否是对称数(数组/非数组解法)
leetcode剑指offer53–n-1中缺失的数字(二分//or等差数列)
leetcode剑指offer53–n-1中缺失的数字(二分//or等差数列)
复习C部分:1.for循环 2.do while循环语句 3.在一个有序数组中查找某个数,例如在1~10之间找7(例题包含计算n的阶乘+打印1~10的奇数+二分法)
复习C部分:1.for循环 2.do while循环语句 3.在一个有序数组中查找某个数,例如在1~10之间找7(例题包含计算n的阶乘+打印1~10的奇数+二分法)
113 0
复习C部分:1.for循环 2.do while循环语句 3.在一个有序数组中查找某个数,例如在1~10之间找7(例题包含计算n的阶乘+打印1~10的奇数+二分法)
|
算法 索引
【Day28】力扣算法(超详细思路+注释) [1790. 仅执行一次字符串交换能否使两个字符串相等 ] [328. 奇偶链表 ][148. 排序链表]
了解(超详细思路+注释) [1790. 仅执行一次字符串交换能否使两个字符串相等 ] [328. 奇偶链表 ][148. 排序链表]。
123 0
【Day28】力扣算法(超详细思路+注释) [1790. 仅执行一次字符串交换能否使两个字符串相等 ] [328. 奇偶链表 ][148. 排序链表]
AcWing 32. 调整数组顺序使奇数位于偶数前面
AcWing 32. 调整数组顺序使奇数位于偶数前面
69 0
AcWing 32. 调整数组顺序使奇数位于偶数前面
|
测试技术
7-177 输出全排列 (20 分)
7-177 输出全排列 (20 分)
100 0