21xrx.com
2024-09-20 01:02:23 Friday
登录
文章检索 我的文章 写文章
C++算法题解
2023-06-22 04:49:12 深夜i     --     --
C++ 算法 题解 数据结构 编程思路

C++是一种强大的编程语言,用于编写算法和编程的应用程序。随着C++的流行,许多人正在学习C++算法。在这篇文章中,我们将介绍一些C++算法题目。

1. Fibonacci数列

Fibonacci数列是一个非常简单而又常见的算法问题。题目是:给定一个正整数n,求Fibonacci数列的第n项。

在C++中,我们可以使用递归或循环来解决这个问题。递归方法如下:


int fib(int n) {

  if (n <= 1)

    return n;

  return fib(n-1) + fib(n-2);

}

循环方法如下:


int fib(int n) {

  if (n <= 1)

    return n;

  int a = 0, b = 1;

  for (int i = 2; i <= n; ++i) {

    int c = a + b;

    a = b;

    b = c;

  }

  return b;

}

2. 反向输出字符串

另一个常见的算法问题是反向输出字符串。题目是:给定一个字符串,将字符串反向输出。

在C++中,我们可以使用循环或递归来解决这个问题。循环方法如下:


void reverse(string& str) {

  int n = str.length();

  for (int i = 0; i < n / 2; ++i) {

    char c = str[i];

    str[i] = str[n-i-1];

    str[n-i-1] = c;

  }

}

递归方法如下:


void reverse(string& str, int left, int right) {

  if (left >= right)

    return;

  char c = str[left];

  str[left] = str[right];

  str[right] = c;

  reverse(str, left+1, right-1);

}

void reverse(string& str) {

  reverse(str, 0, str.length()-1);

}

3. 最长公共子序列

最长公共子序列是一种常见的问题,在字符串匹配和生物信息学领域中也经常出现。题目是:给定两个字符串,找出它们的最长公共子序列。

假设两个字符串为s1和s2,我们可以定义一个二维数组dp来表示它们的最长公共子序列。dp[i][j]表示s1的前i个字符和s2的前j个字符的最长公共子序列的长度。我们可以使用以下公式来计算dp[i][j]:


if (s1[i-1] == s2[j-1])

  dp[i][j] = dp[i-1][j-1] + 1;

else

  dp[i][j] = max(dp[i-1][j], dp[i][j-1]);

最后的结果为dp[s1.length()][s2.length()],即两个字符串的最长公共子序列长度。

4. 矩阵旋转

矩阵旋转是另一个常见的算法问题。题目是:给定一个n*n的矩阵,将矩阵顺时针旋转90度。

我们可以使用以下公式来计算旋转后的坐标:


new_col = row

new_row = n - 1 - col

其中,row表示原始坐标的行,col表示原始坐标的列,new_row表示旋转后的坐标的行,new_col表示旋转后的坐标的列。

代码如下:


void rotate(vector<vector<int>>& matrix) {

  int n = matrix.size();

  for (int i = 0; i < n / 2; ++i) {

    for (int j = i; j < n-i-1; ++j) {

      int temp = matrix[i][j];

      matrix[i][j] = matrix[n-j-1][i];

      matrix[n-j-1][i] = matrix[n-i-1][n-j-1];

      matrix[n-i-1][n-j-1] = matrix[j][n-i-1];

      matrix[j][n-i-1] = temp;

    }

  }

}

总结

以上是一些常见的C++算法题目和解法。当然,C++有很多其他用途,比如图形化计算和游戏开发等。学好C++算法不仅可以为这些领域提供基础,还能够让你在编程方面更加得心应手。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复
    相似文章