【年度征文邀请,老题目新解法,描述我的一些编程心得】2023-12-30

缘由本论坛年度征文邀请

之前论坛给的一个笔耕不辍实体已经给后辈玩了,那波浪上的孙猴儿会随波逐流摇来晃去的,后辈挺喜欢的。

前几天回复了一个整数正序分解,虽说是老话题了,不过常有新想法,其实整数正序分解整合不止一种解法,我个人总结有4种解法,其一用2个倒序,其二用升幕合成,其三用降幕,其四数组。

历年都有接触这样的老题目,也都有一种解法,今天又兴起写了一个解法,那么,就来看看我历年都有哪些回复有关整数正序的博文:

 

这样数来历年回复写了9个,当然这些代码都会逐渐公布的,但未必就去详解,那么,今天趁着这个年度征文主题,就今天刚写的降幕和之前写的升幕2种解法做详解。

void 整数正序分解升幕()
{int a = INT_MAX, aa = 0, m = 1;fj:if (a){ aa = a % 10 * m + aa, m *= 10, a /= 10; goto fj; }std::cout << aa << "\n";
}
void 整数正序分解降幕()
{int a = INT_MAX, aa = 0, m = a<1e+1 ? 1 : a<1e+2 ? 1e+1 : a<1e+3 ? 1e+2 : a<1e+4 ? 1e+3 : a<1e+5 ? 1e+4 : a<1e+6 ? 1e+5 : a<1e+7 ? 1e+6 : a<1e+8 ? 1e+7 : a<1e+9 ? 1e+8: a<1e+10 ? 1e+9 : 0;fj:if (a){std::cout << a / m;a %= m;m /= 10;goto fj; }
}

升幕和降幕整数直接用INT最大值来分解,升序采用的是合成后一次输出解法,分解种用10幕逐渐上升之法,从代码可以看到m初始化为1,之后一直乘以10,即循环第一次为1第二次为10第三次为100第四次为1000这样一直升起来的算法,整数分解采用的是倒序法,从代码也可以看到整合的正序是从个位合成开始的,然后是十位,然后是百位,然后是千位,直到整数分解完毕,当然这种算法自有用武之地,如果逐次显示的话就会是显示1位数再显示2位数再显示3位数再显示4位数直到结束。

降序采用的是判断获得10的幕次值,在分解中用除法输出整数最高位,逐个输出的解法,从代码可以看到解法循环中除法输出整数的最高位后,整数求余就会减去最高位,整数则成为一个减去最高位的新数,然后幕值除以10,这样就变为了降幕求法,直到整数分解完成。

以上2个算法都是用一个循环完成的,当然采用数组和2次倒序用2个循环才能完成。

另外,前些天也回复了一个老问题有序数组合并,我写的新解是不用第三数组也能实现:

 

同样也会逐渐公布的,今天就描述一下不用第三数组的新解法。

	int a[]{2, 4, 6, 8}, b[]{1, 3, 5, 7}, al = 4, bl = 4;int x = 0, xx = 0, t = 0;
hb:if (x < al)
{//缘由https://ask.csdn.net/questions/8046940/54437706if (a[x] > b[xx])t = a[x], a[x] = b[xx], b[xx] = t;
px:if (xx<bl)
{if (b[xx] > b[xx + 1]){t = b[xx], b[xx] = b[xx + 1], b[xx + 1] = t, ++xx;goto px;}
}++x; xx = 0;goto hb;
}x = xx = 0;
sc:if (x < al || xx < bl)
{if (x < al)cout << a[x], ++x;elsecout << b[xx], ++xx;goto sc;
}

目标是不使用第三数组,至于其他指标,如空间时间就不进行分析了,留给他人玩去,只说解法,首先按升序来实现,用其中一个数组对另一个数组逐个从头对比,若条件符合则交换2个数组的数据,并对被对比的数组进行一次排序,然而这个排序非同普通的排序,排序的条件限制不会每次都循环到数组全部的,只要交换后的数组变为有序即可,有点类似插入排序,这样就实现交换后2个数组依然有序,直到循环到主对比数组的最后结束,很显然用小数组作为主对比交换的次数就小,这样最后输出的顺序是主对比数组再被对比数组轮流输出即可,这样就不用第三数组,也不会出现数组越界灯系列问题,也节约空间。

还有自守数的新解,还有判断质数的新解,还有数字转人民币的新解法,还有开方的新算法,还有求因子,这些都是老问题新解法,不过不是今年的了,若想了解的话可以阅读我已经公布的博文或将来公布的博文。

已经公布的博文就说一下自守数同构数:

bool 自守数新解(int n)
{return (n * n - n) % (n < 10 ? 10 : n < 100 ? 100 : n < 1000 ? 1000 : n < 10000 ? 10000 : n < 100000 ? 100000 : n < 1000000 ? 1000000 :n < 10000000 ? 10000000 :n < 100000000 ? 100000000 :n < 1000000000 ? 1000000000 :n < 10000000000 ? 10000000000 :1);
}

这个算法是平方减去本数再检查是否为0,各位为0就是,否则不是。

bool 自守数新解(int n)
{int a = n, b = 10;while ((a/=10))b *= 10;return (n * n - n) % b;
}

 这个算法是分解求得幕值,然后道理同上面,代码比较简洁。

再说一下已经公布的比较高效求质数:

bool sushu(int n)
{//偶数只有2之后都是奇数,因此写时可跳过偶数即奇数步进2;终止为商大等于除数;使用之前求出的质数数组作为除数。if(n == 2 || n == 1) return 1;if (n % 2 == 0) return 0;//在这题可有可无,示意可单独处理 && a > 2for (int a = 3; a <= n/a; a += 2)//媲美sqrt,更高级的使用即时质数数组if (n%a == 0) return 0;return 1;
}

这个算法已经有比较详细注释,我采用的是除法作为结束条件,有人曾经说比较复杂,后发现论坛就有用乘方的,道理都是一样的同开方,不过我不是用的步进1,而是步进2,这样就更节约时间。

再说一下已经公布的数字转中文金额无限位数终极算法,曾经有人断言我肯定要用非常多的判断语句,结果我一个判断都不用:

string 标准人民币金额制式模板 = "零仟·零佰·零拾·零☆不可说☆·零仟·零佰·零拾·零☆无量·零仟·零佰·零拾·零不可思议·零仟·零佰·零拾·零那由他·零仟·零佰·零拾·零阿僧祇·零仟·零佰·零拾·零恒河沙·零仟·零佰·零拾·零极·零仟·零佰·零拾·零载·零仟·零佰·零拾·零正·零仟·零佰·零拾·零涧·零仟·零佰·零拾·零沟·零仟·零佰·零拾·零穰·零仟·零佰·零拾·零秭·零仟·零佰·零拾·零垓·零仟·零佰·零拾·零京·零仟·零佰·零拾·零兆·零仟·零佰·零拾·零亿·零仟·零佰·零拾·零万·零仟·零佰·零拾·零元", 中文值 = "零壹贰叁肆伍陆柒捌玖", 转换输出标准 = "", 缩读处理 = "零仟零佰零拾";string[] 反转单位集合 = 标准人民币金额制式模板.Split('·').Reverse().ToArray();long 要转换的数字 = new Random().Next(int.MaxValue);int 位数 = 0, 读单位 = 0;Console.WriteLine("要转换的数字:" + 要转换的数字.ToString() + "转换:");do{转换输出标准 = 转换输出标准.Insert(0, 反转单位集合[位数].Replace("零", 中文值[(int)(要转换的数字 % 10)].ToString()));++位数;} while ((要转换的数字 /= 10) > 0);Console.WriteLine(转换输出标准);/*会计标准的输出就是上面这样了,来看看如何生成读的文字,首先说明,代码修改和优化在写完后期进行,这是个人习惯了.其实规则还是很单纯的,首先处理最多4项,再处理左右321项,从最多处理开始,左补零,右单位,最后处理单项进阶单位*/
————————————————
版权声明:本文为CSDN博主「智者知已应修善业」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xianfajushi/article/details/44810753

 算法注明都说了,就不赘言了。

再说一下已经公布的C++平方开方(任意开方):

void 平方开方(int n)
{int a = 0, f = 0;double z = 0, m = 0.1;while ((f = a*a) < n)++a;if (f == n)cout << a << "\t";else{z = --a; a = 5;while (m>1e-14){while ((z + a*m)*(z + a*m) < n)++a;while ((z + a*m)*(z + a*m) > n)--a;z += a*m; a = 5;m *= 0.1;}cout << setprecision(17) << z << "\t";}
}int p = 1;while(p<=100) 平方开方(p++);

这个算法用平方的办法对比,并且使用二分法的思路跳跃式进行以节约时间提高效率,求开方多见提问的使用国外公式,也见有国内使用系数的,我是自己思路设计实现的。 

再说一下求因子,通常提问和回复的都是从1顺序求到数本身,而我则用除法,求到小等于商即可:

void 完美数新解()
{//缘由https://ask.csdn.net/questions/7818030?spm=1005.2025.3001.5141int n = 1, j = 0, c = 0;while (++n <= 1000){while (++c <= n / c)if (n%c == 0)j += c + (c==n/c?0:n / c); else;if (j - n == n)cout << n << "\t"; else;j = c = 0;}
}

有关因子的算法,用除法限制结束条件可以提高运算效率,通常的算法是从1开始要计数到数本身结束,而我采用除法为结束条件则不需要计算到数本身,只要商大于除数就结束,则效率大为提高,例如求4的全因子,1开始商是4即数本身,2则商2,3就结束不会进入循环体了,或许有人看到这里会窃笑或提出强烈抗议,要说这样求是错的,其实不然,看我输出的条件就知道,虽然因子和是包含了数本身,但是,我采用的是所有因子和减去数本身,这样就符合完美数的定义了,从代码看和是除数和商的集合,因此除数不用逐步求到数本身就能大大提高运输效率,其实与求因子有关的都可以用这种方法,这个是含1不含本身,还有是不含1的减去1即可,不含1和本身的减去1和本身即可,都通用这个算法,这个算法还有一个重点是除数和商不相等则加商,相等则不加商,因此4的全因子是1,2,4,那么,含1不含本身的和就是3。

当然这些都不是老用着一种解法回复所有提问,都是新思路,新解法,也是最为合理的解法,不做多余的浪费运算,当然还有一些是未公布的,将来逐渐公布。

还有3个数排序不用循环,还有求1到N的和公式,还有求年的月的天数,还有求星期几的400年规律,还有头尾双向双数据排序法,这些都是可圈可点的,就不一一详细罗列,可以看博客。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/589549.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络物理层 习题答案及解析

2-1 下列选项中&#xff0c;不属于物理层接口规范定义范畴的是&#xff08; D &#xff09;。 A. 引脚功能 B. 接口形状 C. 信号电平 D. 传输媒体 【答案】D 【解析】 2-2 某网络在物理层规定&#xff0c;信号的电平范围为- 15V~15V &#xff0c; 电线长…

js 对象

js 对象定义 <!DOCTYPE html> <html> <body><h1>JavaScript 对象创建</h1><p id"demo1"></p> <p>new</p> <p id"demo"></p><script> // 创建对象&#xff1a; var persona {fi…

CSS 丝带形状效果

CSS 丝带形状效果如图&#xff1a; 通过CSS创建折叠丝带形状 这里代码应该比较清晰易懂&#xff0c;clip-path 的值应该也容易理解。要注意的是&#xff0c;我们使用了 color-mix() 函数&#xff0c;这个属性允许创建主颜色的深色版本。现在如果我们将元素旋转相反的方向&#…

「Kafka」生产者篇

「Kafka」生产者篇 生产者发送消息流程 在消息发送的过程中&#xff0c;涉及到了 两个线程 ——main 线程和Sender 线程。 在 main 线程中创建了 一个 双端队列 RecordAccumulator。 main线程将消息发送给RecordAccumulator&#xff0c;Sender线程不断从 RecordAccumulator…

使用STM32 HAL库实现RS232串口通信的步骤和技巧

本文将介绍如何使用STM32 HAL库来实现RS232串口通信&#xff0c;包括步骤、API函数的调用方法和一些技巧。具体将讨论串口配置、发送和接收数据的方法&#xff0c;并提供相关示例代码。 引言&#xff1a; STM32 HAL库为嵌入式系统提供了简化和标准化的编程接口&#xff0c;方便…

什么是零日攻击?

1. 什么是零日漏洞 零日攻击是指利用零日漏洞对系统或软件应用发动的网络攻击。 零日漏洞也称零时差漏洞&#xff0c;通常是指还没有补丁的安全漏洞。由于零日漏洞的严重级别通常较高&#xff0c;所以零日攻击往往也具有很大的破坏性。目前&#xff0c;任何安全产品或解决方案…

chrome浏览器记录不住网站登录状态,退出后再打开就需要重新登陆的解决办法

chrome浏览器记录不住网站登录状态&#xff0c;退出后再打开就需要重新登陆&#xff0c;比较繁琐。 解决办法&#xff1a; 1、chrome浏览器右上角三个竖的点&#xff0c;然后进入“设置”&#xff08;Settings&#xff09;&#xff0c;选择“隐私与安全”&#xff08;Privacy…

【产品设计】信息建设三驾马车:PLM系统拆解

本篇文章将介绍PLM的基础信息、发展及模块功能等内容&#xff0c;让大家对PLM有一个全面、完整地了解&#xff0c;方便在后期的工作中能快速地使用其解决方案&#xff0c;希望本篇文章能对你有所帮助。 PLM系统主要实现产品模块业务&#xff0c;既包含产品的创意设计、样品打样…

vmware部署docker+springboot+MySQL(超详细)

一、前期准备 (一)安装jdk #docker search openjdk #docker pull openjdk:8 (二)确认网络 如果局域网其他终端(如手机访问),虚拟机网络连接需要选择《桥接》模式,而且,需要使用有线连接,不能使用Wi-Fi,切忌切忌! 并且要选择实际的那个有线连接。比如我这里是“R…

ArkTS - @Builder自定义构建函数

这个Builder作用就是可以把组件样式抽离出来&#xff0c;写成公共组件&#xff0c;下边记录下全局自定义构建函数用法及注意的地方。 官方文档&#xff1a;开发者可以将重复使用的UI元素抽象成一个方法&#xff0c;在build方法里调用。 一、用法 下边代码&#xff0c;我在Co…

5 个顶级的免费磁盘分区软件工具评测分享

磁盘分区可能是一个脆弱而复杂的过程&#xff0c;磁盘崩溃或用户设备受到病毒攻击的风险很高。因此&#xff0c;它们很难由用户单独或手动管理。本文详细介绍了可以帮助简化磁盘分区过程的不同软件工具、它们的功能和优点。那么让我们开始吧。 什么是磁盘分区工具&#xff1f;…

CSS 纵向顶部往下动画

<template><div class"container" mouseenter"startAnimation" mouseleave"stopAnimation"><!-- 旋方块 --><div class"box" :class"{ scale-up-ver-top: isAnimating }"><!-- 元素内容 -->&…

vue3(十)-基础入门之Swiper轮播与自定义指令

一、Swiper html : 注意&#xff1a; class“swiper-wrapper”、class“swiper-slide” 等类名不能写错 <body><!-- 导入下载好的包或通过 CDN 导入vue、swiper.js、swiper.css --><!-- <script src"https://unpkg.com/vue3/dist/vue.global.js"&…

ROS安装PR2

一、PR2介绍 PR2是Willow Garage公司设计的机器人平台&#xff0c;也是目前科研领域经常用到的机器人之一。PR2有两条手臂&#xff0c;每条手臂七个关节&#xff0c;手臂末端是一个可以张合的夹爪&#xff1b;PR2依靠底部的四个轮子移动&#xff0c;在头部、胸部、肘部、夹爪上…

Java实现树结构(为前端实现级联菜单或者是下拉菜单接口)

Java实现树结构&#xff08;为前端实现级联菜单或者是下拉菜单接口&#xff09; 我们常常会遇到这样一个问题&#xff0c;就是前端要实现的样式是一个级联菜单或者是下拉树&#xff0c;如图 这样的数据接口是怎么实现的呢&#xff0c;是什么样子的呢&#xff1f; 我们可以看看 …

初始SpringBoot:详解特性和结构

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java项目分享》 《RabbitMQ》《Spring》《SpringMVC》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 前言一、SpringBoot…

[情商-2]:理解情商最关注的要素 - 情绪,情绪,情绪,不是事情本身,不是逻辑推理,不是讲道理

前言&#xff1a; 情商最关注的要素是情绪&#xff0c;他人的情形&#xff0c;自己的情绪&#xff0c;情绪是一个完全不同于技术人员经常关注的逻辑推理、问题解决。对于技术人员而言&#xff0c;它是一个完全不同的领域&#xff0c;有着不同的行为模式。 因此&#xff0c;在…

MySQL所有常见问题

一、事务 定义:一组操作要么全部成功,要么全部失败,目的是为了保证数据最终的一致性 在MySQL中,提供了一系列事务相关的命令: start transaction | begin | begin work:开启一个事务commit:提交一个事务rollback:回滚一个事务事务的ACID 原子性(Atomicity):当前事…

AI人工智能技术发现了拉斐尔名画背后的秘密:这幅画并非完全由大师本人完成

最近&#xff0c;一个先进的人工智能神经网络在拉斐尔的名画中发现了一个不寻常的地方&#xff1a;其中的一副面孔并非由拉斐尔本人绘制&#xff0c;而是出自其他艺术家之手。 详细文章网址链接&#xff1a;Deep transfer learning for visual analysis and attribution of pai…

负载均衡概述

负载均衡 负载均衡 建立在现有网络结构之上&#xff0c;它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。 四层负载均衡 vs 七层负载均衡 四层负载均衡&#xff08;目标地址和端口交换&#xff09;…