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

华为od(D卷) 用连续自然数之和来表达整数

文章目录

  • 题目描述
  • 输入描述
  • 输出描述
  • 示例1
  • 示例2
  • 思路
  • 代码

题目描述

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

输入描述

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

输出描述

该整数的所有表达式和表达式的个数。如果有多种表达式,输出要求为:
自然数个数最少的表达式优先输出
每个表达式中按自然数递增的顺序输出,具体的格式参见样例。
在每个测试数据结束时,输出一行”Result:X”,其中X是最终的表达式个数。

示例1

输入
9

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

示例2

输入
10

输出
10=10
10=1+2+3+4
Result:2

思路

滑动窗口

代码

public class Demo18 {public static void main(String[] args) {Scanner in = new Scanner(System.in);while (in.hasNextInt()) {int n = in.nextInt();System.out.println("Result:" + window(n));}in.close();}public static int window(int n) {// 左闭右闭int left = 1;int sum = 0;List<List<Integer>> res = new ArrayList<>();for (int right = 1; right <= n; right++) {sum += right;while (sum > n) {sum -= left;left++;}if (sum == n) {List<Integer> a = new ArrayList<>();for (int i = left; i <= right; i++) {a.add(i);}res.add(a);sum -= left;left++;}}Collections.reverse(res);for (List<Integer> re : res) {String collect = re.stream().map(String::valueOf).collect(Collectors.joining("+"));System.out.println(n + "=" + collect);}return res.size();}
}

http://www.mrgr.cn/news/2716.html

相关文章:

  • python 速成指南
  • RV1126交叉编译OPENCV的各种坑
  • 移动端页面出现闪屏
  • (八)Flink Join 连接
  • 五、SPA 单页面、MPA多页面的理解?它们的优缺点分别是什么?
  • Vue50 todolist自定义事件版本
  • 如何用ChatGPT 4.0创作高质量的小红书笔记?
  • 秋招力扣Hot100刷题总结——动态规划
  • HanLP分词的使用与注意事项
  • JsSIP Demo
  • 【自动驾驶】控制算法(三)轮胎侧偏与车辆动力学模型
  • MyBatis系列
  • 【adb】Mac配置adb环境踩坑记录
  • java版知识付费saas租户平台:剖析现代知识付费平台的功能架构与运营逻辑
  • Ubuntu下通过Docker部署Synapse服务器技术博客
  • 排序(归并排序,非比较排序)
  • Java面试篇(多线程相关专题)
  • 六、什么是SEO优化(搜索引擎优化)?SPA单页面应用如何实现SEO优化?
  • RCE编码绕过--php://filter妙用
  • Linux驱动开发基础(中断)