当前位置: 首页 > news >正文

华为od-C卷100分题目-3用连续自然数之和来表达整数

华为od-C卷100分题目-3用连续自然数之和来表达整数

题目描述

一个整数可以由连续的自然数之和来表示给定一个整数,计算该整数有几种连续自然数之和的表达式,且打印出每种表达式

输入描述

一个目标整数T(1<=T<=1000)

输出描述

该整数的所有表达式和表达式的个数。如果有多种表达式,输出要求为:

自然数个数最少的表达式优先输出

每个表达式中按自然数递增的顺序输出,具体的格式参见样例。

在每个测试数据结束时,输出一行”Result:X”,其中X是最终的表达式个数

输入
9

输出
9=9
9=4+5
9=2+3+4
Result:3

说明 整数9有三种表达方法:

示例二
输入
10
输出
10=10
10=1+2+3+4
Result:2

public class Main {public static void main(String[] args) {int num = new Scanner(System.in).nextInt();int count = 0;for (int i = num; i > 0; i--) {List<Integer> answer = getAnswer(i, num);if (!answer.isEmpty()) {count++;System.out.printf("" + num + "=");for (int j = 0; j < answer.size(); j++) {System.out.printf("" + answer.get(j));if (j != answer.size() - 1) {System.out.printf("+");}}System.out.println();}}System.out.println("Result:" + count);}public static List<Integer> getAnswer(int an, int num) {LinkedList<Integer> list = new LinkedList<>();double data = Math.sqrt(4 * (an * an + an - (2 * num)) + 1.0);double a = (-1 - data) / -2;double b = (-1 + data) / -2;if (Math.floor(a) - a == 0) {for (int i = (int) a; i <= an; i++) {list.add(i);}}return list;}
}

思路:等差数列,可以使用求和公式,(An-A1+1)来表示个数,则结果为(A1+An)*(An-A1+1)/2 = 输入的数(num)

展开得到: - A1^2 + A1 + An - 2*num + An^2 = 0

通过二元一次方程的通解,得到公式

A1 = -b ± sqrt(b * b - 4 * a * c) / (2 * a)

= -1 ± sqrt(1 * 1 - 4 * (-1) * (An - 2*num + An * 2)) / (2 * (-1))

得到的A1只要是整数就说明结果是对的,并且一定是唯一解
根据题意要求,从大到小遍历就行了。其实还可以优化,只是没有测试数据,并且On的复杂度应该能过了

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Word中插入Mathtype右编号,调整公式与编号的位置
  • PHP维吾尔文转换成拉丁文
  • 前端JS必用工具【js-tool-big-box】学习,获取当前浏览器向上滚动还是向下滚动,获取当前距离顶部和底部的距离
  • vue-$set修改深层对象的值
  • 【云原生进阶之数据库技术】第二章-Oracle-原理-4.6.3.7-闪回事务查询技术
  • 我用香橙派做了一个Klipper 3D打印控制器
  • QuanTA: 一种新的高秩高效微调范式
  • 码蹄集部分题目(2024OJ赛18期;并查集+ST表+贪心)
  • GMT shp转gmt数据
  • 618大促有哪些好物是必买的?这些好物你绝对不能错过!
  • HTML静态网页成品作业(HTML+CSS)—— 兰蔻化妆品网页(1个页面)
  • 目前比较好用的LabVIEW架构及其选择
  • 【Neo4j】Windows11使用Neo4j导入CSV数据可视化知识图谱
  • 人工智能和机器学习这两个概念有什么区别?
  • 肾合的秘密:长期出汗,身体在告诉你什么?
  • hexo+github搭建个人博客
  • Apache的80端口被占用以及访问时报错403
  • canvas 高仿 Apple Watch 表盘
  • CAP理论的例子讲解
  • CSS盒模型深入
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • idea + plantuml 画流程图
  • node入门
  • rabbitmq延迟消息示例
  • WebSocket使用
  • 关于使用markdown的方法(引自CSDN教程)
  • 基于webpack 的 vue 多页架构
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 微信小程序实战练习(仿五洲到家微信版)
  • 微信支付JSAPI,实测!终极方案
  • 我的zsh配置, 2019最新方案
  • 协程
  • 你对linux中grep命令知道多少?
  • 阿里云API、SDK和CLI应用实践方案
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​探讨元宇宙和VR虚拟现实之间的区别​
  • #pragma multi_compile #pragma shader_feature
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (C语言)共用体union的用法举例
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)LINQ之路
  • *1 计算机基础和操作系统基础及几大协议
  • .Net CF下精确的计时器
  • .net core 外观者设计模式 实现,多种支付选择
  • .Net FrameWork总结
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .net 使用ajax控件后如何调用前端脚本
  • .net项目IIS、VS 附加进程调试
  • .skip() 和 .only() 的使用
  • @Autowired 与@Resource的区别
  • @RequestBody与@RequestParam:Spring MVC中的参数接收差异解析