• 面试经典不用中间变量交换两个整数的值


    在网上搜了大概有四种办法:

     
    用下面的程序验证一下:
    void swap1(int &a,int &b)
    
    {
    
        a=a+b;
    
        b=a-b;
    
        a=a-b;
    
        return;
    
    }
    
    
    
    void swap2(int &a,int &b)
    
    {
    
        a=a-b;
    
        b=a+b;
    
        a=b-a;
    
    }
    
    /*swap3 很经典*/
    
    void swap3(int &a,int &b)
    
    {
    
       a^=b;
    
       b^=a;
    
       a^=b;
    
       /*等效的一句话操作是:
    
       	a^=b^=a^=b;
    
       */
    
    }
    
    
    
    /*swap4 ,最精炼*/
    
    void swap4(int &a,int &b)
    
    {
    
    	b=a^b^(a=b);
    
    }
    int main(int argc, char const *argv[])
    
    {
    
    	int a=3;
    
    	int b=4;
    
    
    
    	printf("Before swap,a=%d ,b=%d\n",a,b );
    
    	swap1(a,b);
    
    	printf("After swap1,a=%d ,b=%d\n",a,b );
    
    
    
    	swap2(a,b);
    
    	printf("After swap2,a=%d ,b=%d\n",a,b );
    
    
    
    	swap3(a,b);
    
    	printf("After swap3,a=%d ,b=%d\n",a,b );
    
    
    
    	swap4(a,b);
    
    	printf("After swap4,a=%d ,b=%d\n",a,b );
    
    
    
    	return 0;
    
    }

     

    输出结果证明解法有效:

    image

  • 相关阅读:
    。。。
    __new__ 单例
    bokeh
    空间数据可视化
    关系网络图
    Pandas 50题练习
    seaborn
    数据输出及内容美化 简单介绍
    数据分析---项目总结
    数学建模
  • 原文地址:https://www.cnblogs.com/aqxinzhuan/p/3086542.html
Copyright © 2020-2023  润新知