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++面试常见问题.分享给大家供大家参考,具体如下: 1. 继承方式 public 父类的访问级别不变 protected 父类的public成员在派生类编程protected,其余的不变 private 父类的所有成员变成private #include <iostream> using namespace std; class base { public: void printa() { cout <<"base"&
-
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
-
采用C++实现区间图着色问题(贪心算法)实例详解
本文所述算法即假设要用很多个教室对一组活动进行调度.我们希望使用尽可能少的教室来调度所有活动.采用C++的贪心算法,来确定哪一个活动使用哪一间教室. 对于这个问题也常被称为区间图着色问题,即相容的活动着同色,不相容的着不同颜色,使得所用颜色数最少. 具体实现代码如下: //贪心算法 #include "stdafx.h" #include<iostream> #define N 100 using namespace std; struct Activity { int n
-
C++实现八皇后问题的方法
本文实例展示了C++实现八皇后问题的方法,是数据结构与算法中非常经典的一个算法.分享给大家供大家参考之用.具体方法如下: 一般在八皇后问题中,我们要求解的是一个8*8的国际象棋棋盘中,放下8个皇后且互相不能攻击的排列总数.皇后的攻击范围为整行,整列,以及其斜对角线. 由于皇后的攻击范围特性,注定我们每行只能放下一个皇后,于是我们要做的只是逐行放下皇后.八皇后问题是回溯法的典型问题.这里我们用的方法很简单: 从第一行开始逐个检索安全位置摆放皇后,一旦有安全位置则考虑下一行的安全位置.如果发现某行没
-
c++面试题字符串拷贝函数示例
复制代码 代码如下: #include<iostream>using namespace std; //字符串拷贝函数char * sCpy(char *strDest, char *strSource){ _ASSERT((strDest != NULL) && (strSource!=NULL)); char *d = strDest; //获取dest的当前位置 char *s = strSource; /
-
从string类的实现看C++类的四大函数(面试常见)
朋友面试的一道面试题,分享给大家,面试官经常会问到的,实现string类的四大基本函数必掌握. 一个C++类一般至少有四大函数,即构造函数.拷贝构造函数.析构函数和赋值函数,一般系统都会默认.但是往往系统默认的并不是我们所期望的,为此我们就有必要自己创造他们.在创造之前必须了解他们的作用和意义,做到有的放矢才能写出有效的函数. #include <iostream> class CString { friend std::ostream & operator<<(std::
-
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++动态规划之背包问题解决方法.分享给大家供大家参考.具体分析如下: 问题描述: 背包的最大容量为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
-
总结C/C++面试中可能会碰到的字符串指针题
前言 不知道大家有没有这种体会,很多面试题看似简单,却需要深厚的基本功才能给出完美的解答.企业要求面试者写一个最简单的strcpy函数都可看出面试者在技术上究竟达到了怎样的程度,我们能真正写好一个strcpy函数吗?我们都觉得自己能,可是我们写出的strcpy很可能只能拿到10分中的2分.读者可从本文看到 strcpy函数从2分到10分解答的例子,看看自己属于什么样的层次.此外,还有一些面试题考查面试者敏捷的思维能力. 分析这些面试题,本身包含很强的趣味性;而作为一名研发人员,通过对这些面试题的
-
分享C++面试中string类的一种正确写法
具体来说: 能像 int 类型那样定义变量,并且支持赋值.复制. 能用作函数的参数类型及返回类型. 能用作标准库容器的元素类型,即 vector/list/deque 的 value_type.(用作 std::map 的 key_type 是更进一步的要求,本文从略). 换言之,你的 String 能让以下代码编译运行通过,并且没有内存方面的错误. 复制代码 代码如下: void foo(String x) { } void bar(const String& x) { } Strin
随机推荐
- CSS实现表格的背景两色渐变
- JS非空验证及邮箱验证的实例
- IOS开发中NSURL的基本操作及用法详解
- php select,radio和checkbox默认选择的实现方法
- Javascript 5种方法实现过滤删除前后所有空格
- 跟老齐学Python之list和str比较
- 使用Python多线程爬虫爬取电影天堂资源
- C#利用子线程刷新主线程分享教程
- C#图片按比例缩放的实现代码
- ThinkPHP调试模式与日志记录概述
- ajax回调函数参数传递正确方法
- 把html页面的部分内容保存成新的html文件的jquery代码
- MSSQL 检查所使用的语句是否符合标准
- 走进javascript——不起眼的基础,值和分号
- 实例解析Json反序列化之ObjectMapper(自定义实现反序列化方法)
- 几个比较实用的JavaScript 测试及效验工具
- 内置于win xp的防火墙ICF应用
- Nginx中if语句的判断条件与多条件判断详解
- PHP教程之PHP中shell脚本的使用方法分享
- 微信小程序之多列表的显示和隐藏功能【附源码】