mirror of
https://github.com/huihut/interview.git
synced 2026-03-13 10:02:55 +08:00
添加查找算法和SingleProblem
This commit is contained in:
33
Problems/NeumannNeighborProblem/Formula/Neumann2_3_12.cpp
Normal file
33
Problems/NeumannNeighborProblem/Formula/Neumann2_3_12.cpp
Normal file
@@ -0,0 +1,33 @@
|
||||
#include <stdio.h>
|
||||
|
||||
//通项法
|
||||
int Neumann2_3_12(int n) {
|
||||
|
||||
//通项公式的求解请查看说明文档
|
||||
return 2 * n*n + 2 * n + 1;
|
||||
}
|
||||
|
||||
int main() {
|
||||
int n = 0, a = 0;
|
||||
|
||||
printf("------冯诺依曼邻居问题------\n");
|
||||
printf("已知:\n");
|
||||
printf(" 0 阶冯诺依曼邻居的元胞数为 1 \n");
|
||||
printf(" 1 阶冯诺依曼邻居的元胞数为 5 \n");
|
||||
printf(" 2 阶冯诺依曼邻居的元胞数为 13 \n");
|
||||
printf("求:\n");
|
||||
printf(" n 阶冯诺依曼邻居的元胞数\n");
|
||||
printf("----------------------------\n");
|
||||
printf("请输入n\n");
|
||||
scanf("%d", &n);
|
||||
|
||||
//用通项公式求解
|
||||
a = Neumann2_3_12(n);
|
||||
|
||||
printf("------------通项法-------------\n");
|
||||
printf(" %d 阶冯诺依曼邻居的元胞数为 %d\n", n, a);
|
||||
|
||||
getchar();
|
||||
getchar();
|
||||
return 0;
|
||||
}
|
||||
BIN
Problems/NeumannNeighborProblem/Formula/Neumann2_3_12.exe
Normal file
BIN
Problems/NeumannNeighborProblem/Formula/Neumann2_3_12.exe
Normal file
Binary file not shown.
38
Problems/NeumannNeighborProblem/Formula/README.md
Normal file
38
Problems/NeumannNeighborProblem/Formula/README.md
Normal file
@@ -0,0 +1,38 @@
|
||||
|
||||
## 冯诺依曼邻居问题(通项公式)
|
||||
|
||||
### 代码
|
||||
|
||||
[冯诺依曼邻居问题(通项公式)代码](Neumann2_3_12.cpp)
|
||||
|
||||
### 问题说明
|
||||
|
||||
某算法从一个1×1的方格开始,每次都会在上次图形的周围再加上一圈方格,在第n次的时候要生成多少个方格?下图给出了n = 0,1,2是的结果。
|
||||
|
||||

|
||||
|
||||
### 功能说明
|
||||
|
||||
本程序使用通项公式求解。
|
||||
|
||||
### 代码简述
|
||||
|
||||
若设第n次生成的方格数是a(n),则:
|
||||
|
||||
a(1) = a(0) + 4 * 1
|
||||
a(2) = a(1) + 4 * 2
|
||||
a(3) = a(2) + 4 * 3
|
||||
...
|
||||
a(n) = a(n-1) + 4 * n
|
||||
|
||||
化简可得:
|
||||
|
||||
a(n) - a(1) = 4 * (n + (n-1) + ... + 2 )
|
||||
|
||||
即:
|
||||
|
||||
a(n) = 2 * n*n + 2 * n + 1
|
||||
|
||||
则可得出a(n)的通项公式,即可用通项公式直接求解。
|
||||
|
||||
在程序中用Neumann2_3_12函数返回a(n)的值。
|
||||
13
Problems/NeumannNeighborProblem/README.md
Normal file
13
Problems/NeumannNeighborProblem/README.md
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
## 冯诺依曼邻居问题
|
||||
|
||||
### 问题说明
|
||||
|
||||
某算法从一个1×1的方格开始,每次都会在上次图形的周围再加上一圈方格,在第n次的时候要生成多少个方格?下图给出了n = 0,1,2是的结果。
|
||||
|
||||

|
||||
|
||||
### 解法
|
||||
|
||||
* [通项公式解法](Formula)
|
||||
* [递推关系解法](Recursive)
|
||||
36
Problems/NeumannNeighborProblem/Recursive/Neumann2_4_12.cpp
Normal file
36
Problems/NeumannNeighborProblem/Recursive/Neumann2_4_12.cpp
Normal file
@@ -0,0 +1,36 @@
|
||||
#include <stdio.h>
|
||||
|
||||
//递归法
|
||||
int Neumann2_4_12(int n) {
|
||||
|
||||
//由图可知第0次有1个方格
|
||||
if (n == 0) return 1;
|
||||
|
||||
//递推关系的求解请查看说明文档
|
||||
return Neumann2_4_12(n - 1) + 4 * n;
|
||||
}
|
||||
|
||||
int main() {
|
||||
int n = 0, a = 0;
|
||||
|
||||
printf("------冯诺依曼邻居问题------\n");
|
||||
printf("已知:\n");
|
||||
printf(" 0 阶冯诺依曼邻居的元胞数为 1 \n");
|
||||
printf(" 1 阶冯诺依曼邻居的元胞数为 5 \n");
|
||||
printf(" 2 阶冯诺依曼邻居的元胞数为 13 \n");
|
||||
printf("求:\n");
|
||||
printf(" n 阶冯诺依曼邻居的元胞数\n");
|
||||
printf("----------------------------\n");
|
||||
printf("请输入n\n");
|
||||
scanf("%d", &n);
|
||||
|
||||
//建立递推关系,使用递归求解
|
||||
a = Neumann2_4_12(n);
|
||||
|
||||
printf("------------通项法-------------\n");
|
||||
printf(" %d 阶冯诺依曼邻居的元胞数为 %d\3n", n, a);
|
||||
|
||||
getchar();
|
||||
getchar();
|
||||
return 0;
|
||||
}
|
||||
BIN
Problems/NeumannNeighborProblem/Recursive/Neumann2_4_12.exe
Normal file
BIN
Problems/NeumannNeighborProblem/Recursive/Neumann2_4_12.exe
Normal file
Binary file not shown.
38
Problems/NeumannNeighborProblem/Recursive/README.md
Normal file
38
Problems/NeumannNeighborProblem/Recursive/README.md
Normal file
@@ -0,0 +1,38 @@
|
||||
|
||||
## 冯诺依曼邻居问题(递推关系)
|
||||
|
||||
### 代码
|
||||
|
||||
[冯诺依曼邻居问题(递推关系)代码](Neumann2_4_12.cpp)
|
||||
|
||||
### 问题说明
|
||||
|
||||
某算法从一个1×1的方格开始,每次都会在上次图形的周围再加上一圈方格,在第n次的时候要生成多少个方格?下图给出了n = 0,1,2是的结果。
|
||||
|
||||

|
||||
|
||||
### 功能说明
|
||||
|
||||
本程序使用递推关系求解。
|
||||
|
||||
### 代码简述
|
||||
|
||||
若设第n次生成的方格数是a(n),则:
|
||||
|
||||
a(1) = a(0) + 4 * 1
|
||||
a(2) = a(1) + 4 * 2
|
||||
a(3) = a(2) + 4 * 3
|
||||
...
|
||||
a(n) = a(n-1) + 4 * n
|
||||
|
||||
则可得:
|
||||
|
||||
a(n) = a(n - 1) + 4 * n
|
||||
|
||||
然后在代码中使用递归法,递归结束条件为n = 0,即
|
||||
|
||||
if (n == 0) return 1;
|
||||
|
||||
则可写出递归法的代码。
|
||||
|
||||
在程序中用Neumann2_4_12函数进行递归求解。
|
||||
Reference in New Issue
Block a user