C语言编程 发表于 2021-10-6 17:00:21

C++经典算法题目:冯诺依曼邻居题目丨两种解法(内含源码示例)

https://p3.toutiaoimg.com/large/pgc-image/6d115a3dff764a58a77335dc07661214
问题说明

某算法从一个1×1的方格开始,每次都会在上次图形的周围再加上一圈方格,在第n次的时候要生成多少个方格?下图给出了n = 0,1,2是的结果。
https://p5.toutiaoimg.com/large/pgc-image/bf0fd1ed00ff48588930662e58092640
解法一:本程序使用通项公式求解

代码简述

若设第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)的值。
源码分享

#include//通项法intNeumann2_3_12(intn) {//通项公式的求解请查看说明文档return2* n*n +2* n +1;}intmain() {intn =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();return0;}

解法二:本程序使用递推关系求解

代码简述

若设第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函数进行递归求解。
源码分享

#include//递归法intNeumann2_4_12(intn) {//由图可知第0次有1个方格if(n ==0)return1;//递推关系的求解请查看说明文档returnNeumann2_4_12(n -1) +4* n;}intmain() {intn =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();return0;}今天的分享就到这里了,大家要好好学C++哟~
写在最后:对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!
编程学习册本分享:
https://p26.toutiaoimg.com/large/pgc-image/2c99a73d9efc456d8c5d068b95afb16e
编程学习视频分享:
https://p5.toutiaoimg.com/large/pgc-image/b5ed2cf7c0cc4829b72978fc9d06b410
整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)
接待转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!
对于C/C++感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C++的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!

河婉清 发表于 2021-10-6 20:02:56

转发了

永盛Teddy 发表于 2021-10-6 17:48:49

转发了
页: [1]
查看完整版本: C++经典算法题目:冯诺依曼邻居题目丨两种解法(内含源码示例)