闲谈程序设计三则:抛弃传统单步进,用推导归纳出来的规律写代码。
本论坛常见新学提问都是一些入门级别的问题,近来AI活跃抢答,然而,对于有些问题AI可以说是答非所问,令人哭笑不得,而AI能回答的通常也只是极普通的算法,这样的算法随便搜索多如牛毛,因此,AI目前决不可能超越人类的能力,下面以常见提问为例,证明AI尚处于幼儿期,要发展到成人期还有相当长的路要走,当然,也不能说AI一点用处都没有,在机器人替代人工作繁重体力劳动很有用武之地,当机器人大量替代人类做繁重体力劳动后,人类就可以从繁重体力劳动中获得解放,人类也能享受机器人提供的服务,毕竟机器人可以设计的很人性化很温和,没有人的好恶u情绪,这也是有好处的,人类解放后做什么呢,可以把大量时间和精力开发科技、艺术、文化,美术等等的脑力劳动,有是无穷的创意;而机器人和AI只是复制机而已,要从复制到有创意,机器人和AI还有走相当的路来从量变到质变的过程。
下面话转正题,以近期看到的提问为例:
1:【不用第三变量交换2个数】2024-10-18
int a = 0, b = 0; cin >> a >> b;
if (a > b)
{//缘由https://ask.csdn.net/questions/8153190/54892711
a = a - b;
b = b + a;
a = b - a;
}
else
{
a = b - a;
b = b - a;
a = b + a;
}
cout << a << " " << b << "\n";
本代码的优点就是不超过数据范围,因为使用了差进行计算,差也就只会在数据范围内;依据原数据进行判断后执行相应的运算实现2个数据的交换,从而不使用第三变量;如代码所示,如果变量a大于b,那么,首先用大减去小获得它们的差;这个差用来加小的就变为大的,再用这个大的减去差就变成小的;如果变量a小于b,那么也先用大的减去小的获得它们的差,这时用大的减去差就是小的,最后再用小的加上差就是大的,从而实现2个数的变换,纯粹数学推导,小学的知识,需要注意的是这个交换只能使用判断式,不能使用三目运算执行。
2:【幸运数各位和3倍数】2024-10-19
通常回答这样提问大都使用单步进循环实现,而我这里通过推导直接使用步进3来实现:试想3的倍数毕竟就是3步进肯定是3的倍数无疑,而如何能确定3倍数的各位和也是3的倍数?也是可以推导出来的,因为3的倍数无论其个位数是什么相加的和就会是3的倍数就是这么奇妙,怎么知道的呢?从小范围去推导计算出来的,如3无论如何就是3的倍数,6和9道理一样;那么,这个推导是否在多位数也一样规律呢,还是用计算的办法验证,如9+3=12,12的各位和是3,12+3=15,15各位和是6等等,可知奇妙就在这里,都符合规律,因此,推导得出如下结论:
首先求a是否为3的倍数,如果不是加差,后以3步进,一个循环可求和,亦可输出a值。可推导出来3的倍数各位和也是3的倍数。
void 幸运数各位和3倍数()
{//缘由https://ask.csdn.net/questions/8153520/54893645
int a = 0, b = 0, h = 0;
std::cin >> a >> b;
if (a % 3)a += 3 - a % 3;
qh:if (a <= b){ h += a; std::cout << a << " "; a += 3; goto qh; }
std::cout << h;
}
这样就不用单步进求,不用多余的运算和判断,直接输出步进结果就是了,提高效率,这是目前AI所不能独立思考得来的,AI只能是复制存储后才能回答的。
3:【任何一个自然数m的立方均可写成m个连续奇数之和】2024-10-17
找规律的作用就是使用快速运算提高效率,就是要归纳样例中的规律,找到快速表达式一次性计算出起始奇数,后面的奇数也就确定了用一个循环就解决了;
经过分析可以得到这样一个表达式:起始奇数=m*m-m+1。
void m立方写成m个连续奇数之和()
{
int m = 0, q = 0, j = 0;
cin >> m;
q = m * m - m + 1;
sc:if (j < m)
{
if (j)cout << " ";
cout << q;
++j;
q += 2;
goto sc;
}
}
同上例一样,在循环前处理,后用循环步进2来直接单运算输出,无需多余的判断和运算,由于奇数间距是2,从而提高效率,因为,有规律可循,这个规律是从样例推导出来的,推导的是起始的第一个奇数,之后是间距2的m个奇数,再计算这些奇数和验证的,验证过程同上述例子同道理。
因此,这2个案例都使用小学的知识,就能实现的,并不是什么高深的理论,只要细心分析、推导、验证就能总结出规律来的,学编程玩推导就是乐趣,这是人类的专利,不是机器的专利,或许将来机器也能实现自行创新推导,那也是人类给它赋能的,不是冰冷机器自己的,之所以人高于动物,其能来自自性,非外界赋予,这就是最大区别,因此,将来的人类主要培养文化、艺术、科技、逻辑、思维......;假如说有一天全体人类都好逸恶劳的话,那时,人类就沦落为动物了,也就要灭绝的开始,那时,人类就真的可悲了,还好,相信未来的人类还不至于沦落为动物,因为,自性存在的缘故,所以,人类的将来全由人类自己决定,不但要走出地球,寻找另外宜居星球,也会很好保护现在宜居地球,就好像人们不止有一个住所一样,而是有好多处住所,也就是拥有地球,也会拥有其他宜居星球,星球的自然演化,有生、住、坏、灭的阶段,有效地利用星球住的阶段,那么,人类将拥有更广阔的星际区域宜居场所,也能观看到星球演化,记录星球演化,演说星球演化,不再是井蛙的高级阶段,因此,人类要好好思考将来的去向,为了将来的去向,该如何精心培育人类,努力做好规划、规范,推动人类向高层次演进。