banner
李大仁博客

李大仁博客

天地虽大,但有一念向善,心存良知,虽凡夫俗子,皆可为圣贤。

Solution to common software company's tricky interview programming questions

Today, while browsing through Boke Garden, I came across a blog post that introduces commonly asked programming questions in software company interviews. I decided to solve them in advance, as I was well-prepared. If any of you have experienced these problems before, please feel free to leave a comment. Thank you!

  1. Given an arbitrary integer n, please write an algorithm to calculate the result of 1-2+3-4+5-6+7...n.

Wrong answer: If you answer like this, with an additional FOR loop, the efficiency will be very low, O(n). Software companies definitely won't hire you.

int n = this.TextBox1.Text.ToString();
// The original text is incorrect, in C# language, it should be changed to int n = Int.Parse(this.TextBox1.Text.ToString());
int Sum = 0;
for (int i = 0; i < n + 1; i++)
{
if ((i % 2) == 1)
{
Sum += i;
}
else
{
Sum = Sum - i;
}
}

Correct answer: Analyzing the structure of the equation, we can see that (1-2) = (3-4) = ... = (2n-1)-(2n) = -1. Therefore, we can deduce the result using backtracking. The result is n/2 times -1 plus n, and then we can determine the sign of n to know the result. This algorithm only has a cost of O(1).

int n = input();
int result = (-1) * (n/2) + (n) * (n%2 ? -1:1);
printf("%d", result);

  1. Given an arbitrary integer n, display the last four digits of n raised to the power of 2008.

Wrong answer: It's unlikely that the result of raising a number to the power of 2008 won't overflow. Software companies will definitely consider whether to hire you.

void main()
{
int Y, P;
Y = n ^ 2008;
cout << "The result of n raised to the power of 2008 is: " << Y % 10000 << endl;
}

Correct answer: After analyzing, we can conclude that the results of raising numbers from 1 to 5 to the power of 2008 are the same, but 5^2008 might overflow. To simplify, we can use n^1004 * n^1004 or 502 * 502 * 502 * 502, and the result will be the same.

long n = input();
long result = ((n % 6) ^ 2008) % 1000; // Can be changed to n^1004 * n^1004
cout << "The last four digits of n raised to the power of 2008 are: " << result << endl;

  1. Given two integers A and B, please write an algorithm to swap the values of the two variables without using any additional variables.

Correct answer: Swapping two numbers without using a third variable is often used in single-chip development, where time is traded for space. Huawei has tested this multiple times.

void main()
{
cout << "Before swapping, A = " << A << " and B = " << B << endl;
A = A + B;
B = A - B;
A = A - B;
cout << "After swapping, A = " << A << " and B = " << B << endl;
}

Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.