思维与算法

简介: 很多时候,写程序都是思维变算法,算法变代码的过程,其中很关键的步就是思维变算法。   这里所说的思维就是,你眼睛能看出来规律。 再简单明了就是比如一个题目:统计一个英文字符串中的英文单词个数,如字符串“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这个我们大脑是怎样得到的一样。
以上只是我个人的一点观点,写了下来,以便自己慢慢体会~
 

 

相关文章
|
1天前
|
人工智能 运维 安全
|
4天前
|
SpringCloudAlibaba 负载均衡 Dubbo
微服务架构下Feign和Dubbo的性能大比拼,到底鹿死谁手?
本文对比分析了SpringCloudAlibaba框架下Feign与Dubbo的服务调用性能及差异。Feign基于HTTP协议,使用简单,适合轻量级微服务架构;Dubbo采用RPC通信,性能更优,支持丰富的服务治理功能。通过实际测试,Dubbo在调用性能、负载均衡和服务发现方面表现更出色。两者各有适用场景,可根据项目需求灵活选择。
377 124
微服务架构下Feign和Dubbo的性能大比拼,到底鹿死谁手?
|
6天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
637 107
|
3天前
|
Java 数据库 数据安全/隐私保护
Spring 微服务和多租户:处理多个客户端
本文介绍了如何在 Spring Boot 微服务架构中实现多租户。多租户允许单个应用实例为多个客户提供独立服务,尤其适用于 SaaS 应用。文章探讨了多租户的类型、优势与挑战,并详细说明了如何通过 Spring Boot 的灵活配置实现租户隔离、动态租户管理及数据源路由,同时确保数据安全与系统可扩展性。结合微服务的优势,开发者可以构建高效、可维护的多租户系统。
200 127
|
3天前
|
Web App开发 前端开发 API
在折叠屏应用中,如何处理不同屏幕尺寸和设备类型的样式兼容性?
在折叠屏应用中,如何处理不同屏幕尺寸和设备类型的样式兼容性?
226 124
|
3天前
|
人工智能 数据可视化 测试技术
Coze平台指南(3):核心功能-创建智能体与设计角色
Coze 智能体是由大语言模型驱动,通过提示词设定角色,并借助知识库、插件和工作流扩展能力,以执行特定任务的AI助手。对测试工程师而言,精心设计的智能体可显著提升测试效率与质量,关键是要准确理解测试需求,并将其转化为智能体的角色设定和功能配置。建议进一步学习知识库与工作流,以深化应用。
|
7天前
|
JSON fastjson Java
FastJson 完全学习指南(初学者从零入门)
摘要:本文是FastJson的入门学习指南,主要内容包括: JSON基础:介绍JSON格式特点、键值对规则、数组和对象格式,以及嵌套结构的访问方式。FastJson是阿里巴巴开源的高性能JSON解析库,具有速度快、功能全、使用简单等优势,并介绍如何引入依赖,如何替换Springboot默认的JackJson。 核心API: 序列化:将Java对象转换为JSON字符串,演示对象、List和Map的序列化方法; 反序列化:将JSON字符串转回Java对象,展示基本对象转换方法;