[解题报告]【第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月前
循环迭代判断\找质数——以每行8个的形式输出100-999内的质数
循环迭代判断\找质数——以每行8个的形式输出100-999内的质数
94 5
|
C语言
乘法口诀标的打印及解释
打印乘法口诀表可以说是c语言中一个很经典的一个简单程序了。 打印乘法口诀表的第一反应可能会是很难,怎么打印出这么多相乘的数呢。但是仔细想分析和考虑的话,其实很简单。那么我来说一下打印乘法口诀表的思路。
100 0
复习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的奇数+二分法)
129 0
复习C部分:1.for循环 2.do while循环语句 3.在一个有序数组中查找某个数,例如在1~10之间找7(例题包含计算n的阶乘+打印1~10的奇数+二分法)
|
算法
[算法]将一个正整数拆分成若干个正整数的和,输出所有的结果不重复
推荐先看我的一篇介绍Set去重的博文地址是 http://blog.csdn.net/bug_moving 看了这个之后,再来看下面的程序基本就能看懂了 题目 我也不太记得,因为是朋友给我口述的,然后给了我一个截图,看了图片大致也能知道题目要我们做什么 package yn; import java.util.ArrayList; import java.
2829 0
|
算法 索引
Leetcode 40组合总数(回溯)Ⅱ&41缺失的第一个正数&42接雨水
给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
111 0
Leetcode 40组合总数(回溯)Ⅱ&41缺失的第一个正数&42接雨水
|
算法
算法 | 妙用递归(顺序&逆序)打印一个数的每一位
- 程序调用自身的编程技巧称为递归( recursion)。递归作为一种算法在程序设计语言中广泛应用 - 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问-题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量 - 递归的能力在于用有限的语句来定义对象的无限集合 - 一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回
285 0
算法 | 妙用递归(顺序&逆序)打印一个数的每一位
有一个数列(1)循环输出数列的值(2)求数列中所有数值的和(3)猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含次数
有一个数列(1)循环输出数列的值(2)求数列中所有数值的和(3)猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含次数
282 0

热门文章

最新文章