您的位置:首页 > 健康 > 美食 > 广告设计与制作专业专升本_域名停靠黄金网页推广方案_无锡网站关键词推广_婚恋网站排名前三

广告设计与制作专业专升本_域名停靠黄金网页推广方案_无锡网站关键词推广_婚恋网站排名前三

2025/3/15 6:39:57 来源:https://blog.csdn.net/qq_41764621/article/details/143174964  浏览:    关键词:广告设计与制作专业专升本_域名停靠黄金网页推广方案_无锡网站关键词推广_婚恋网站排名前三
广告设计与制作专业专升本_域名停靠黄金网页推广方案_无锡网站关键词推广_婚恋网站排名前三

以往对于输入的数据为了图省事,都是从0开始,但是当遇到从1开始的时候,推理的过程中发现脑子转得好慢,于是想把类似的问题总结成一个思路流程,方便下次面对同样的问题又开始胡思乱想

一、问题引入:

现在有1 2 3 4 5这5个点,我想要循环输出,那么我应该用到取模运算,但是取模总令我感到困惑,尤其是节点编号从1开始的时候。

二、解决方式:

(1)首先明确取模运算的基本规则和适用范围:

取模运算 a % n 的结果是 a 除以 n 的余数,这个结果总是小于 n。
当 a 是负数或不在范围内时,取模可能存在数值错误:

  • 对于C、C++、JAVA 余数的符号只与被除数一致(例如: 7%-3=1,-7%-3=-1 -7%3=-1 ),对于python 来说,余数的符号只与除数一致。
  • 对于小数,C++有特定的小数取模fmod(),但这也太不常用了,,略

(2)其次就是把习惯的解决方式进行套用:

具体方法就是找到习惯使用的方法的适用范围,把要解决的问题适配到方法里面,进行数值范围等的转变,按照常用方法进行处理后,将处理后的结果再次进行数值范围变换回复到当前问题的数值范围中。

例如:取模运算往往使用场景是下标 0~x ,但是现在下标从1开始,那么我们可以选择:先将下标从 1~x 修改为 0~x-1 (就是做一个左右区间的减一操作),这样,就可以符合取模运算的经常使用的数据范围了。

做对应的取模运算

(3)最后就是恢复为当前问题所在的数值范围:

对于本例来说,就是再将左右区间同时加回1,恢复到原来的数据范围。

三、代码示例:

for (int i = 1; i <= 10; ++i) {int index = (i - 1) % 5 + 1; // 计算下标cout << points[index] << " "; // 输出对应的点
}
  • i 从1循环到10。
  • i - 1i 的范围变为 0 到 9 。
  • 取模 % 5 会将结果限制在 0 到 4 之间。
  • 加1的操作将下标转换回 1 到 5 的范围。

四、总结:

        我之所以写这么一大堆是因为,我突然发现自己存在一个思维上的牛角尖:

        当一个问题A我觉得可以用方法X解决,但是方法X的一些适用条件对于A问题并不能满足时,这个时候我就开始钻牛角尖了,啊啊啊啊啊。

        我就开始:”那我要修改方法X让他适配A问题“。这就是症结所在,这就是很多时候我很忙但不知道在忙啥的原因!!!

        @我解释一下我这么想这么做为什么是钻牛角尖以及这么想这么做的危害:

        如果方法X是一个成熟的算法,我贸然的修改只会破坏掉他的精密推理和边界情况。而且我往往在思考如何修改方法X的时候耗费了大量的心力,然后却没能改明白(这不废话吗,人家迭代了多少个版本的代码算法我是什么神仙一改就改对了,,,,),这种尝试行为不仅会浪费大量的时间和精力,更会磨损我的自信,所以以后要有意识避免这种行为。

        @注意,我更应该关注的是:方法X的边界限制条件,方法X是如何推理出来的(这个时间不够也可以先放放),以及为什么这个问题A可以使用方法X算出来

        因此,在面对同样的问题时,合理的做法是:

        调整问题A的输入,看看怎么修改调整才能让其符合算法X的要求,然后再使用算法X进行处理,最后再将结果放缩回去以满足原始问题A。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com