目录
1.Fibonacci数列
解析题目本意就是找到离斐波那契数最近的那个输入数的距离。
很简单的思路,直接一边建立斐波那契数列,一边判断是否已经小于这个斐波那契数,直接break中断循环,然后判断其离前后距离那个更近(也就是去min)。
详细代码:
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e6;
int Fib[N];
int main() {
int n;
cin >> n;
Fib[0] = 0;
Fib[1] = 1;
int i;
for (i = 2; i < N; ++i) {
Fib[i] = Fib[i - 1] + Fib[i - 2];
if (n <= Fib[i]) {
break;
}
}
int mid = i;
cout << min(Fib[i] - n, n - Fib[i - 1]) << endl;
}
2.单词搜索
大体一看就可以知道是一道DFS(深度优先遍历)题。
判断好返回条件就很简单了,就当pos遍历到最后一个数时,就可以返回true了。
注意:最后如果搜索到底没结果,记得将vis回溯,就一开始遍历过的数调回没遍历过。
详细代码:
class Solution {
public:
const static int N = 120;
bool vis[N][N] = { false };
int dx[4] = {0,0,1,-1};
int dy[4] = {1,-1,0,0};
int m, n;
bool DFS(vector<string>& board, int i, int j, string word, int pos)
{
if(pos == word.size() - 1)
return true;
vis[i][j] = true;
for(int k = 0; k < 4; ++k)
{
int x = i + dx[k], y = j + dy[k];
if(x >= 0 && x < m && y >= 0 && y < n && board[x][y] == word[pos + 1] && !vis[x][y])
{
if(DFS(board, x, y, word, pos + 1))
return true;
}
}
vis[i][j] = false;
return false;
}
bool exist(vector<string>& board, string word) {
m = board.size();
n = board[0].size();
for(int i = 0; i < m; ++i)
{
for(int j = 0; j < n; ++j)
{
if(board[i][j] == word[0] && !vis[i][j])
{
if(DFS(board, i, j, word, 0))
return true;
}
}
}
return false;
}
};
3.杨辉三角
简单题目不加赘述。
直接上代码。
注意:最后打印记得左靠齐五格就行。
#include <iostream>
using namespace std;
int dp[31][31];
int main() {
int n;
cin >> n;
dp[1][1] = 1;
for (int i = 2; i <= n; i++) {
for (int j = 1; j <= i; j++) {
dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1];
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
printf("%5d", dp[i][j]);
}
printf("\n");
}
return 0;
}