思维与算法

简介: 很多时候,写程序都是思维变算法,算法变代码的过程,其中很关键的步就是思维变算法。   这里所说的思维就是,你眼睛能看出来规律。 再简单明了就是比如一个题目:统计一个英文字符串中的英文单词个数,如字符串“I am a student.”中的英文单词个数为4。

很多时候,写程序都是思维变算法,算法变代码的过程,其中很关键的步就是思维变算法。

 

这里所说的思维就是,你眼睛能看出来规律。

再简单明了就是比如一个题目:统计一个英文字符串中的英文单词个数,如字符串“I am a student.”中的英文单词个数为4。

如果给你一个字符串 I am a student 。你一数就得到了答案4 ,这是很自然的事,被看作常识。可是关键,怎样转变为算法。

 

唉,这就是一个思维变算法的过程。这还得由简入繁追溯到大脑的底层数据。你大脑是怎么得到的4呢,因为你数了,你是怎么数的呢?噢是这样,出现了字母后面一个空格则这个就是一个单词,如果这个字母后面仍然是字母,则它还是同一个单词,这就是一个找非字母的把字母分开的过程然后统计数目的过程。

这就是一种机制,这种机制就是算法的皱形。

然后就可以通过这个画个流程,然后成了算法。

 

很多时候我们都是在进行如上所述的这个过程,而且这个要思维清晰。考虑很多事,诸如 如果有例外情况等等。

矩阵题就是这样:

/*               C++奋斗乐园|C++论坛|算法论坛|ACM/ICPC论坛

                82   81   80   79   78   77   76   75   74   73

                83   50   49   48   47   46   45   44   43   72

                84   51   26   25   24   23   22   21   42   71

                85   52   27   10    9    8    7   20   41   70

                86   53   28   11    2    1    6   19   40   69

                87   54   29   12    3    4    5   18   39   68

                88   55   30   13   14   15   16   17   38   67

                89   56   31   32   33   34   35   36   37   66

                90   57   58   59   60   61   62   63   64   65

                91   92   93   94   95   96   97   98   99  100*/


//看到这个方阵,一想到的就是找规律。这个题目规律只有两个 转圈 自加
//转圈就要给数组元素定位,主要做的工作就是找规律然后根据规律用for简化,然后再赋值。
//如果把一圈当作一个循环的话,那整体循环N/2次

#include <iostream>
using namespace std;
int main()
{
        const int N=10;//这个就不说了
        
        //先建立一个二维数组
        int a[N][N];
        
        //为了观察运行出的错,先把数组各个元素通通赋为0吧,这样一来,有什么错误在运行时候,一看就能看出来。
        for(int i=0;i<N;i++)
                for(int j=0;j<N;j++)
                {
                        a[i][j]=0;
                }
        
        
        
        //试了一下从1赋值,感觉很费事,还是从后往前推吧,最后一个数字是N*N
        int last=N*N;
        int n=N;    
        int i=n-1,j;//第一个循环要用到i(第54行),所以赋个初值
        for(int k=0;k<N/2;k++)//如果把一圈当作一个循环的话,那整体循环N/2次
        {
                
                for(j=n-1;j>k;j--)//给100-92赋值
                        a[i][j]=last--;
                for(i=n-1;i>k;i--)//给91-83赋值
                        a[i][j]=last--;
                for(;j<n-1;j++)   //给82-74赋值
                        a[i][j]=last--;
                for(;i<n-1;i++)   //给73-65
                        a[i][j]=last--;
                //最外面的一圈赋值完成了,进行下一圈。
                n--;i--;
        }
        
        //显示数组各个元素
        for(int i=0;i<N;i++)
        for(int j=0;j<N;j++)
        {
                cout<<a[i][j]<<"\t";
                if(j==N-1)         //这要注意换行。
                        cout<<endl<<endl;
        }
        return 0;
}
 
 
 
 
我觉得新手应该致力于培养我的这种思维变算法的方法,因为我觉得有了这些,你才能去优化,才能谈去简化代码,才能去看效率等等。这就需要发掘一些细节问题,把人的思维意识放到最底层,就像I am a student.”中的英文单词个数为4这个我们大脑是怎样得到的一样。
以上只是我个人的一点观点,写了下来,以便自己慢慢体会~
 

 

相关文章
|
3天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
278 116
|
18天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
6天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
391 38
Meta SAM3开源:让图像分割,听懂你的话
|
13天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
669 220
|
1天前
|
Windows
dll错误修复 ,可指定下载dll,regsvr32等
dll错误修复 ,可指定下载dll,regsvr32等
129 95
|
11天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1633 157
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
906 61