事前声明:全文仅个人观点,因为突发奇想有编程思维一说,于是上网搜查,只可惜未发有如意答复,于是写下此文~
毛主席曾经说过:“没有调查,没有发言权”,那么我在网上搜索资料后大概将过程分为三阶段: 1.开始 2.继续 3.重新开始
1.开始
这里不区分你究竟是初学or似初学,都得明白至关重要的一件事件就是→审题
这是我们一生都在面对的问题,从出生开始,你就得审题,明白别人在说什么,隐喻什么,又或者在……
审题又可以分为若干步骤
- 初审 (判断题目大概意思)
- 从审 (将题目要求细分化)
- 终审 (留意题目有效范围)
举个栗子:小明,老师叫你放学后留下来擦黑板.
-
初审: 小明 老师 放学后 擦黑板
-
从审: 1.目的人:小明 2.事情: 擦黑板 3.顺序是先放学,再擦黑板
-
终审: 目前命令只限今天 留小明目的是擦黑板 时间是今天放学后
再举个栗子:求1+2+3+……+100=?
-
初审:求1到100累加的和
-
从审: 求累加和 从1开始到100 包括1和100 每次递增1
-
终审: 只求最终结果 是个范式
code ↓
int sum = 0; // 用来储存最后累加的数字
for(int i = 1; i < 101; ++i) { // [1,2,3,……100]
sum += i;
}
System.out.println("sum="+sum); // 输出sum=5050
2.继续
继续即:在开始后你已经对规则有了一定小了解后再去解题,什么是小规则?且看下面:
如果我问你从1992年3月10日到2023年3月26日之间一共过了几天?你怎么分析?
分析如下:算天数 = ↓
算每年中占用有几天 =↓
年又也分闰年、平年 =↓
判断方法 =↓
代码细分析:
天数: 今天到明天算1天
月份:平常normal下: 1 <= month <= 12 但特殊时间要特殊处理
年份:1992 <= year <= 2023
平、闰: if (year % 4 == 0 && year % 100 != 0) || year % 400 == 0 ) 为闰年也就是2月有29天,否则就只有28天
int days = 0; // 记录下天数
// 19920310代表初始时间 20230326代表结束时间
for(int startYear = 19920310; startYear <= 20230326; startYear++) {
int day = startYear % 100; // 取末尾两整为日
int month = startYear / 100 % 100; // 去除末尾两整再取末尾两整为月
int year = startYear / 10000; // 去除末尾四整为年
// 先将不符合时间逻辑的结束掉 符合的就执行days++
if(month == 0 || month > 12)
continue;
// 月份 1、3、5、7、8、10、12 是31天 其余除了2月都是30天
if(day == 0 || day >31)
continue;
if((month == 4 || month == 6 || month == 9 || month == 11) && month > 30)
continue;
// 再是讨论闰、平的事情
if((startYear % 4 == 0 && startYear % 100 != 0) || startYear % 400 == 0) { // 闰年条件
if(month == 2 && day > 29) // 这里别忘了年份是闰年了 月份还得锁定是2月
continue;
} else {
if(month == 2 && day > 28)
continue;
}
// 要是上面那些条件都过了,那就是合法时间了 可以days++
days++;
}
System.out.println("days="+days); // 输出:days=11456
思维:将复杂的时间简单化成数字,然后排除特殊的情况天数,累加计算天数
总结:较为灵活的去使用你所知道的基本数据类型,在结合上自己的知识去排除那少数的非常情况,便是大多数下的正常情况.
3.重新开始
当然,肯定不是说从你原来的那个点开始,而是说你已经完成了那个点该做的事,现在你已经在下一个点的起点了,而你需要做的事就是继续
下面简单介绍几种常用的思维方式(这种东西就靠积累):
一、系统思维
系统性的、层次分明的去思考,要将复杂问题条例清晰化
二、辩证思维
false和true的对立,
三、逆向思维
正着或则反着推理
四、创造性思维
敢于去创新、用0、1取代everything
五、形象思维
将抽象的事情具体化