相关疑难解决方法(0)

在不使用第三个变量的情况下交换两个变量值

在采访中提出的一个非常棘手的问题.

交换两个变量的值,如a=10b=15.

通常要交换两个变量值,我们需要第三个变量,如:

temp=a;
a=b;
b=temp;
Run Code Online (Sandbox Code Playgroud)

现在的要求是,在不使用第三个变量的情况下交换两个变量的值.

c++

97
推荐指数
6
解决办法
10万
查看次数

为什么a =(a + b) - (b = a)是交换两个整数的不错选择?

我偶然发现了这个代码,用于交换两个整数而不使用临时变量或使用按位运算符.

int main(){

    int a=2,b=3;
    printf("a=%d,b=%d",a,b);
    a=(a+b)-(b=a);
    printf("\na=%d,b=%d",a,b);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但我认为这段代码在swap语句中有未定义的行为,a = (a+b) - (b=a);因为它不包含任何序列点来确定评估的顺序.

我的问题是:这是交换两个整数的可接受的解决方案吗?

c c++ swap undefined-behavior sequence-points

58
推荐指数
9
解决办法
7681
查看次数

仅使用两个变量交换两个数字

它是如何进行交换的?

A = A + B

B = A + B

A = B +一

我不同意它换成书!

书中的选项包括"a和b的值的互补","否定和b".希望这些选项也不令人满意吗?

algorithm swap

3
推荐指数
2
解决办法
3894
查看次数

如何在Java中将String转换为适当的位置

如何在Java中将String转换为适当的位置

输入字符串:1234输出应该:4321

我试过的.

public static void main(String args[]) 
{ 
 String number = "1234"; 
 System.out.println("original String: " + number); String reversed = inPlaceReverse(number);
 System.out.println("reversed String: " + reversed);
}



public static String inPlaceReverse(final String input) 
{
   final StringBuilder builder = new StringBuilder(input); 
   int length = builder.length();
   for (int i = 0; i < length / 2; i++)
   {
      final char current = builder.charAt(i); 
      final int otherEnd = length - i - 1;
      builder.setCharAt(i, builder.charAt(otherEnd)); // swap 
      builder.setCharAt(otherEnd, current); 
   }
 return builder.toString(); …
Run Code Online (Sandbox Code Playgroud)

java string

2
推荐指数
1
解决办法
1万
查看次数

标签 统计

c++ ×2

swap ×2

algorithm ×1

c ×1

java ×1

sequence-points ×1

string ×1

undefined-behavior ×1