首页 > 其他分享 >华为od-C卷100分题目-3用连续自然数之和来表达整数

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

时间:2024-06-09 15:33:29浏览次数:21  
标签:int od System 整数 A1 华为 num 100 表达式

华为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的复杂度应该能过了

标签:int,od,System,整数,A1,华为,num,100,表达式
From: https://blog.csdn.net/Casual_Lei/article/details/139520680

相关文章

  • Leetcode1161. 最大层内元素和
    EverydayaLeetcode题目来源:1161.最大层内元素和解法1:层序遍历每次以「层」为单位进行拓展,统计该层的元素和,维护处理过程中的最大值层数和,以及层深度。代码:/**@lcapp=leetcode.cnid=1161lang=cpp**[1161]最大层内元素和*///@lccode=start/***......
  • Qt 子线程调用connect/QMetaObject::invokeMethod 不调用槽函数问题
    在使用invokeMethod进行跨线程调用的时候,发现invokeMethod在某些情况下不能正常调用.经过查各种资料发现invokeMethod底层的调用逻辑是通过Qt事件循环处理,所以子线程需要显示的调用QEventLoop::exec()或者QCoreApplication::processEvents()执行信号槽处理.首先有一个QDemoObje......
  • SuntoryProgrammingContest2024(AtCoder Beginner Contest 357)
    A-SanitizeHands题意:给定一个序列和m,问m按顺序减去这个序列,m>=0情况下最多能减多少个数思路:前缀和+prev(upper_bound())总结:disinfectan(消毒ji),disinfect(消毒,杀毒),aliens(外星人),voidsolve(){ intn,m; cin>>n>>m; vector<int>a(n); for(inti=......
  • (nice!!!)LeetCode 312. 戳气球(区间dp ||记忆化dfs )
    312.戳气球思路:经典区间dp问题。方法一,区间dp。状态dp[i][j]表示:ij这个区间能获得的最大硬币数量。那么我们就可以枚举区间ij的每一个点,为该区间最后一个戳破的气球。细节看注释classSolution{public:intmaxCoins(vector<int>&nums){intn=nums.siz......
  • Spring Boot集成 Geodesy讲解
    目录1Geodesy1.1什么是geodesy1.2操作实践1.2.1pom.xml1.2.2数学公式计算类1.2.3库包调用1.2.4测试1Geodesy1.1什么是geodesy浩瀚的宇宙中,地球是我们赖以生存的家园。自古以来,人类一直对星球上的位置和彼此的距离着迷。无论是航海探险、贸易往来还是科学研究,精确计算......
  • 关于VsCode(一)
    前言.    Vscode使用已经数年,在某次浏览插件时,突然想知道很多预装插件的作用,于是逐个点开详情阅读,显然很多英文没法看懂(即使在翻译软件的协助下),但在某个插件内读到工具书推荐《VisualStudioCode权威指南》(韩骏著),于是心血来潮购买这本书阅读,自此打开Vscode的新大门。......
  • Q19 LeetCode24 两两交换链表节点
    1.注意节点交换顺序,以防节点丢失2.ListNodedummy=newListNode(0,head);定义空指针,并指向head节点 好语句3.还是虚拟头结点好用 1classSolution{2publicListNodeswapPairs(ListNodehead){3ListNodedummy=newListNode(0,head);4......
  • 张宇1000和李林880究竟哪个更难?
    24李林跌落神坛,张宇一战封神!张宇1000和李林880,谁的基础篇更“超纲”?谁覆盖的知识点更多?谁的概念题更多?谁的“强化难度”题更难?基础篇里为什么有“跨专题”的题,都是怎么跨的? 先看880和1000的总体难度。知能行AI教练,用5个等级来反映你的真实解题能力。张宇1000......
  • Q17 LeetCode707 设计链表
     无1classMyLinkedList{2intsize;3ListNodehead;45publicMyLinkedList(){6size=0;7head=newListNode(0);8}910publicintget(intindex){11if(index<0||index>=size)......
  • vscode编译c/c++找不到jni.h文件
    解决办法:一、下载JDK访问Oracle官网的Java下载页面:JavaDownloads|Oracle选择适合您操作系统的JDK版本:对于Windows,选择“Windowsx64”或“Windowsx86”(取决于您的系统是64位还是32位)。对于Linux,选择适合您Linux发行版的压缩包。对于Mac,选择“.dmg”或“.pkg”安装......