[解题报告]【第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;
}


相关文章
|
8月前
|
算法 测试技术 C++
【动态规划】【前缀和】【数学】2338. 统计理想数组的数目
【动态规划】【前缀和】【数学】2338. 统计理想数组的数目
|
7月前
|
移动开发 C++
【洛谷 P1157】组合的输出 题解(深度优先搜索+枚举子集)
该问题要求编程输出从1到n中选择r个元素的所有组合,组合按字典序排列。输入包含两自然数n和r(1&lt;n&lt;21, 0≤r≤n)。输出每个组合时,每个数字占据3个字符宽度。提供的AC代码使用C++,通过递归搜索方法枚举子集。样例输入为5 3,输出显示所有3个元素的组合。
59 0
|
8月前
|
算法 搜索推荐 程序员
第五十练 请以递归方式实现计算给定数字的幂的函数
第五十练 请以递归方式实现计算给定数字的幂的函数
41 4
|
8月前
|
C++
【力扣】2562. 找出数组的串联值
【力扣】2562. 找出数组的串联值
|
8月前
|
算法 测试技术 C++
【数论】【分类讨论】【C++算法】1611使整数变为 0 的最少操作次数
【数论】【分类讨论】【C++算法】1611使整数变为 0 的最少操作次数
|
8月前
|
算法 Java
给定一个字符串数组,如何找到其中最长的回文子串? 要求:编写一个Java函数,输入一个字符串数组,输出其中最长的回文子串。要求时间复杂度为O(n^2)。可以考虑使用动态规划或中心扩展的方法来优化算法。
给定一个字符串数组,如何找到其中最长的回文子串? 要求:编写一个Java函数,输入一个字符串数组,输出其中最长的回文子串。要求时间复杂度为O(n^2)。可以考虑使用动态规划或中心扩展的方法来优化算法。
90 1
|
8月前
|
机器学习/深度学习 存储 算法
数据结构与算法面试题:给定非负整数 m 和 n,计算不大于 m 的数字中,素数的个数。(提示:算法原理为埃氏筛、线性筛)
数据结构与算法面试题:给定非负整数 m 和 n,计算不大于 m 的数字中,素数的个数。(提示:算法原理为埃氏筛、线性筛)
109 0
图解LeetCode——1798. 你能构造出连续值的最大数目
图解LeetCode——1798. 你能构造出连续值的最大数目
85 0