C++面试题之数a、b的值互换(不使用中间变量)
题目要求:将数a、b的值进行交换,并且不使用任何中间变量。
程序如下:
#include<stdio.h> void swapValue1(int &a, int &b) //使用中间变量交换数据 { int temp = a; a = b; b = temp; } void swapValue2(int &a, int &b)//使用加减运算完成数据交换 { a = a + b; b = a - b; a = a - b; } void swapValue3(int &a, int &b) //使用位运算交换数据 { a^=b; b^=a; a^=b; } int main() { int a1 = 1, b1 = 2; int a2 = 3, b2 = 4; int a3 = 5, b3 = 6; swapValue1(a1, b1); swapValue2(a2, b2); swapValue3(a3, b3); printf("a= %d b= %d\n",a1, b1); printf("a= %d b= %d\n",a2, b2); printf("a= %d b= %d\n",a3, b3); return 0; }
运行结果:
解析:
第一种:使用中间变量来达到交换数据的目的,这是最大众的方法,当然了不满足本题的要求。
第二种:
使用简单的加减操作来达到交换a、b值得目的。
缺点:a+b和a-b时,可能会到导致数据溢出。
第三种:
采用位运算的方法,按位异或运算。(建议采用这种方式)
异或运算:相同的二进制位异或运算为0,不相同的二进制位异或运算为1。
关于位运算的知识,参考http://www.jb51.net/article/87880.htm
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
C++ 面试题翻译电话号码实例代码
C++ 面试题翻译电话号码实例代码 例如: 输入:OneTwoThree 输出:123 输入:OneTwoDoubleTwo 输出:1222 输入:1Two2 输出:ERROR 输入:DoubleDoubleTwo 输出:ERROR 有空格,非法字符,两个Double相连,Double位于最后一个单词 都错误. #include <iostream> #include <string> using namespace std; void process(string str) {
-
C++面试常见问题整理汇总
本文总结讲述了C++面试常见问题.分享给大家供大家参考,具体如下: 1. 继承方式 public 父类的访问级别不变 protected 父类的public成员在派生类编程protected,其余的不变 private 父类的所有成员变成private #include <iostream> using namespace std; class base { public: void printa() { cout <<"base"&
-
c++面试题字符串拷贝函数示例
复制代码 代码如下: #include<iostream>using namespace std; //字符串拷贝函数char * sCpy(char *strDest, char *strSource){ _ASSERT((strDest != NULL) && (strSource!=NULL)); char *d = strDest; //获取dest的当前位置 char *s = strSource; /
-
总结C/C++面试中可能会碰到的字符串指针题
前言 不知道大家有没有这种体会,很多面试题看似简单,却需要深厚的基本功才能给出完美的解答.企业要求面试者写一个最简单的strcpy函数都可看出面试者在技术上究竟达到了怎样的程度,我们能真正写好一个strcpy函数吗?我们都觉得自己能,可是我们写出的strcpy很可能只能拿到10分中的2分.读者可从本文看到 strcpy函数从2分到10分解答的例子,看看自己属于什么样的层次.此外,还有一些面试题考查面试者敏捷的思维能力. 分析这些面试题,本身包含很强的趣味性;而作为一名研发人员,通过对这些面试题的
-
C++实现八皇后问题的方法
本文实例展示了C++实现八皇后问题的方法,是数据结构与算法中非常经典的一个算法.分享给大家供大家参考之用.具体方法如下: 一般在八皇后问题中,我们要求解的是一个8*8的国际象棋棋盘中,放下8个皇后且互相不能攻击的排列总数.皇后的攻击范围为整行,整列,以及其斜对角线. 由于皇后的攻击范围特性,注定我们每行只能放下一个皇后,于是我们要做的只是逐行放下皇后.八皇后问题是回溯法的典型问题.这里我们用的方法很简单: 从第一行开始逐个检索安全位置摆放皇后,一旦有安全位置则考虑下一行的安全位置.如果发现某行没
-
采用C++实现区间图着色问题(贪心算法)实例详解
本文所述算法即假设要用很多个教室对一组活动进行调度.我们希望使用尽可能少的教室来调度所有活动.采用C++的贪心算法,来确定哪一个活动使用哪一间教室. 对于这个问题也常被称为区间图着色问题,即相容的活动着同色,不相容的着不同颜色,使得所用颜色数最少. 具体实现代码如下: //贪心算法 #include "stdafx.h" #include<iostream> #define N 100 using namespace std; struct Activity { int n
-
分享C++面试中string类的一种正确写法
具体来说: 能像 int 类型那样定义变量,并且支持赋值.复制. 能用作函数的参数类型及返回类型. 能用作标准库容器的元素类型,即 vector/list/deque 的 value_type.(用作 std::map 的 key_type 是更进一步的要求,本文从略). 换言之,你的 String 能让以下代码编译运行通过,并且没有内存方面的错误. 复制代码 代码如下: void foo(String x) { } void bar(const String& x) { } Strin
-
C++动态规划之背包问题解决方法
本文实例讲述了C++动态规划之背包问题解决方法.分享给大家供大家参考.具体分析如下: 问题描述: 背包的最大容量为W,有N件物品,每件物品重量为w,价值为p,怎样选择物品能使得背包里的物品价值最大? 输入: 10 3 (W,N) 4 5 (w,p) 6 7 (w,p) 8 9 (w,p) 实现代码: #include <stdio.h> #define THING 20 #define WEIGHT 100 int arr[THING][WEIGHT]; /* 背包容量为wei
-
从string类的实现看C++类的四大函数(面试常见)
朋友面试的一道面试题,分享给大家,面试官经常会问到的,实现string类的四大基本函数必掌握. 一个C++类一般至少有四大函数,即构造函数.拷贝构造函数.析构函数和赋值函数,一般系统都会默认.但是往往系统默认的并不是我们所期望的,为此我们就有必要自己创造他们.在创造之前必须了解他们的作用和意义,做到有的放矢才能写出有效的函数. #include <iostream> class CString { friend std::ostream & operator<<(std::
-
C++中求旋转数组中的最小数字(经典面试题)
面试题:旋转数组的最小数字 题目:把一个数组的最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增数组的旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1. 算法: (1)当输入的旋转数组非法时:处理! (2)当输入的旋转数组正常时,index1 = 0:index2=length-1: a:如果arry[index1] <arry[index2]时:说明数组为原数组,并没有进行旋转: b:如果arry[ind
随机推荐
- 一个加密JavaScript的开源工具PACKER2.0.2
- Serv-U防溢出提权攻击解决设置方法
- 设计模式之责任链模式_动力节点Java学院整理
- java后台调用HttpURLConnection类模拟浏览器请求实例(可用于接口调用)
- 浅析Java中的set集合类型及其接口的用法
- React-Native做一个文本输入框组件的实现代码
- 解析C#自定义控件的制作与使用实例的详解
- PHP+shell脚本操作Memcached和Apache Status的实例分享
- pjblog修改技巧汇总
- Docker容器内存限制的方法
- servlet实现文件上传、预览、下载、删除功能
- oracle 11g 设置用户密码大小写敏感测试
- java中rss解析器(rome.jar和jdom.jar)示例
- java string的一些细节剖析
- c#实现用SQL池,多线程定时批量执行SQL语句的方法
- 关于ASP网页无法打开的解决方案
- JS实现点击li标签弹出对应的索引功能【案例】
- Linux服务器下Nginx与Apache共存的实现方法分析
- 用Python+OpenCV对比图像质量的几种方法
- Python类中方法getitem和getattr详解