蓝桥杯-求和问题

news2024/9/27 15:25:17

蓝桥杯-求和问题

  • 1、问题描述
  • 2、解法一:暴力解法(两层循环)
  • 3、解法二:结合律(一层循环解决)

1、问题描述

给定 n 个整数 a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1,a2,...,an,求它们两两相乘再相加的和,即:

S = a 1 . a 2 + a 1 . a 3 + . . . + a 1 . a n + a 2 . a 3 + . . . + a n − 2 . a n − 1 + + a n − 2 . a n + a n − 1 . a n S=a_1.a_2+a_1.a_3+...+a_1.a_n+a_2.a_3+...+a_{n-2}.a_{n-1}++a_{n-2}.a_{n}+a_{n-1}.a_n S=a1.a2+a1.a3+...+a1.an+a2.a3+...+an2.an1++an2.an+an1.an

输入格式

输入的第一行包含一个整数 n

第二行包含 n 个整数 a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1,a2,...,an

输出格式

输出一个整数 S,表示所求的和。请使用合适的数据类型进行运算。

样例输入

4
1 3 6 9

样例输出

117

评测用例规模与约定

对于 30% 的数据,1≤n≤1000,1≤ a i a_i ai≤100 。

对于所有测评用例,1≤n≤200000,1≤ a i a_i ai≤1000。

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 512M

2、解法一:暴力解法(两层循环)

我们直接两个for循环就可以解决,每次遍历到某个数的额时候,让它与自己后面的所有数字相乘并求和即可。

以样例做个循环分析如下:

  • i=0,j=1,2,3
  • i=1,j=2,3
  • i=2,j=3

代码如下:

// //暴力解法,这种会超时。
public static void sum1(){
    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt();
    int[] arr = new int[n];
    long sum=0;
    for (int i = 0; i < n; i++) {
        int temp = scanner.nextInt();
        arr[i]=temp;
    }
    for (int i = 0; i < arr.length; i++) {
        for (int j =i+1; j <arr.length ; j++) {
            sum+=arr[i]*arr[j];
        }
    }
    System.out.println(sum);
    scanner.close();
}

运行结果如下:

image-20230225195126100

这种会超时,看下面这种优化后的。

3、解法二:结合律(一层循环解决)

根据结合律化简求和公式如下所示:
S = a 1 . a 2 + a 1 . a 3 + . . . + a 1 . a n + a 2 . a 3 + . . . + a n − 2 . a n − 1 + + a n − 2 . a n a n − 1 . a n = a 1 ( a 2 + a 3 + . . . + a n ) + a 2 ( a 3 + . . . + a n ) + . . . + a n − 2 ( a n − 1 + a n ) + a n − 1 . a n \begin{align} S & = a_1.a_2+a_1.a_3+...+a_1.a_n+a_2.a_3+...+a_{n-2}.a_{n-1}++a_{n-2}.a_{n}a_{n-1}.a_n \\ & = a_1(a_2+a_3+...+a_n)+a_2(a_3+...+a_n)+...+a_{n-2}(a_{n-1}+a_{n})+a_{n-1}.a_n \end{align} S=a1.a2+a1.a3+...+a1.an+a2.a3+...+an2.an1++an2.anan1.an=a1(a2+a3+...+an)+a2(a3+...+an)+...+an2(an1+an)+an1.an
如果输入为1 3 6 9

第一次两两相乘为1*3+1*6+1*9=1*(3+6+9)
第二次两两相乘为3*6+3*9=3*(+6+9)
第三次两两相乘为6*9=6*(9)
最后相加,即每一次该数乘以sum内不包含本身的值

代码如下所示:

public static void sum2(){
    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt();
    int[] arr = new int[n];
    long sum=0;
    long result=0;
    for (int i = 0; i < n; i++) {
        arr[i] = scanner.nextInt();
        sum+=arr[i];  //直接刚开始就对数组求和
    }
    for (int i = 0; i <n; i++) {
        sum=sum-arr[i];
        result+=arr[i]*sum;
    }
    System.out.println(result);
}

image-20230225195801611

这里sum必须用long类型,要不会超出int范围

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

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

相关文章

Presto 在美图的实践

导读&#xff1a;本文的主题是Presto高性能引擎在美图的实践&#xff0c;首先将介绍美图在处理ad-hoc场景下为何选择Presto&#xff0c;其次我们如何通过外部组件对Presto高可用与稳定性的增强。然后介绍在美图业务中如何做到合理与高效的利用集群资源&#xff0c;最后如何利用…

项目管理的主要内容包括哪些?盘点好用的项目管理系统软件

阅读本文您将了解&#xff1a;1、项目管理的主要内容包括哪些2、好用的项目管理软件 项目管理是为了实施一个特定目标&#xff0c;所实施的一系列针对项目要素的管理过程&#xff0c;包括过程、手段以及技术等。 通过项目管理&#xff0c;我们能够提前安排和控制项目的时间、…

深度解析:我如何用300并发把数据库压挂了

问&#xff1a;为什么300的并发能把支持最大连接数4000数据库压死&#xff1f; 买了一台数据库&#xff0c;最大连接数的参数是 4000&#xff0c;看起来很棒&#xff01;但是 cpu 和内存并不咋好&#xff01;是 2c4g的超低配制。但是想着反正业务量也不大&#xff0c;不如先扛…

【vulhub漏洞复现】CVE-2018-2894 Weblogic任意文件上传漏洞

一、漏洞详情影响版本weblogic 10.3.6.0、weblogic 12.1.3.0、weblogic 12.2.1.2、weblogic 12.2.1.3WebLogic是美国Oracle公司出品的一个application server&#xff0c;确切的说是一个基于JAVAEE架构的中间件&#xff0c;WebLogic是用于开发、集成、部署和管理大型分布式Web应…

Oracle Primavera P6 登录提示错误“该用户已经登录“(SQLite)

目录 引言 解决思路 使用工具 处理办法 引言 在使用Oracle Primavera P6 非正常退出后&#xff0c;Professional再次登录或出现异常&#xff0c;体现为“该用户已经登录。请使用另一个用户名” 以上为近期一个朋友请教的问题&#xff0c;为了给后续出现同样问题朋友给予解…

有限元中四面体的一些积分公式

文章目录有限元中四面体的相关积分公式有限元中四面体的相关积分公式 在 xyzxyzxyz 坐标系中通过四个点 (xi,yi,zi),(xj,yj,zj),(xm,ym,zm),(xp,yp,zp)(x_i, y_i, z_i), (x_j, y_j, z_j), (x_m, y_m, z_m), (x_p, y_p, z_p)(xi​,yi​,zi​),(xj​,yj​,zj​),(xm​,ym​,zm​…

解决PyCharm下OpenCV没有自动补全、函数提示的问题!

Content找到Python环境下的OpenCV安装目录中的“cv2.pyd”文件复制cv2.pyd文件到site-packages文件夹中重启PyCharm&#xff0c;cv2就可以正常使用了最近使用PyCharm编写一段需要使用Opencv库的代码&#xff0c;却发现cv2没有自动补全和函数提示了。博主自己找到以下解决办法&a…

ThreadLocal使用

1、简介ThreadLocal类用来提供线程内部的局部变量&#xff0c;不同的线程之间不会相互干扰这种变量在多线程环境下访问&#xff08;通过get和set方法访问&#xff09;时能保证各个线程的变量相对独立于其他线程内的变量在线程的生命周期内起作用&#xff0c;可以减少同一个线程…

CentOS系统编译安装PHP-5.6.27版本

一、手动安装编译工具&#xff1a; yum install -y gcc gcc-c 二、添加用户和用户组&#xff1a; groupadd web useradd -M -s /sbin/nologin -g web php 三、yum安装依赖&#xff1a; yum -y install libmcrypt libmcrypt-devel mcrypt mhash libxml2-devel libpng-devel l…

适应多场景的云桌面metaScreenshare1.0 sdk

概述 metaRTC新推出云桌面metaScreenshare1.0 sdk版本&#xff0c;基于metaIPC1.0搭建&#xff0c;基于mqtt通信&#xff0c;同时支持windows/linux/android操作系统远程桌面控制&#xff0c;支持Nvidia和Intel的GPU编码&#xff0c;适应多种业务场景&#xff0c;可方便集成到…

ElasticSearch 学习笔记总结(四)

文章目录一、ES继承 Spring Data 框架二、SpringData 功能集成三、ES SpringData 文档搜索四、ES 优化 硬件选择五、ES 优化 分片策略六、ES 优化 路由选择七、ES 优化 写入速度优化七、ES 优化 内存设置八、ES 优化 重要配置一、ES继承 Spring Data 框架 Spring Data 是一个用…

【案例教程】拉格朗日粒子扩散模式FLEXPART

拉格朗日粒子扩散模式FLEXPART通过计算点、线、面或体积源释放的大量粒子的轨迹&#xff0c;来描述示踪物在大气中长距离、中尺度的传输、扩散、干湿沉降和辐射衰减等过程。该模式既可以通过时间的前向运算来模拟示踪物由源区向周围的扩散&#xff0c;也可以通过后向运算来确定…

CKKS自举笔记(CKKS Bootstrapping)

文章目录CKKS Bootstrapping流程流程的框架如何做同态取模操作直接泰勒展开&#xff08;naive idea&#xff09;采用二倍角公式来拟合&#xff08;欧密2018&#xff09;如何做同态编码或解码CKKS的编码和解码基础知识&#xff08;明文下面怎么做&#xff09;同态的旋转、共轭&a…

Linux 进程:进程控制

目录一、进程创建1.fork2.vfork二、进程终止三、进程等待四、进程替换1.理解程序替换2.子进程在程序替换中的作用Linux的进程控制分为四部分&#xff1a; 进程创建进程终止进程等待进程替换 一、进程创建 常见的创建进程的函数有两个&#xff1a; pid_t fork(void)pid_t vf…

一篇文章帮助你初步了解CDN内容分发网络

文章目录CDN内容分发网络CDN内容分发网络的工作原理CDN的作用CDN如何实现内容的加速CDN内容分发网络 CDN&#xff08;Content Delivery Network&#xff09;内容分发网络。CDN 是构建在现有网络基础之上的智能虚拟网络&#xff0c;依靠部署在各地的边缘服务器&#xff0c;通过…

手撕CSDN博文:学用curl命令获取博文页面源码,学不会爬虫先手剥CSDN博文阅读点赞收藏和评论数量

学用curl命令获取博文页面源码&#xff0c;学不会爬虫先手剥CSDN博文阅读点赞收藏和评论数量。 (本文获得CSDN质量评分【xx】)【学习的细节是欢悦的历程】Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&…

客户服务软件推荐榜:28款!

在这个竞争激烈的时代&#xff0c;做到服务对企业的存亡有着深刻的意义。改善客户服务&#xff0c;做好客户服务工作&#xff0c;是关键&#xff0c;因为客户服务团队代表着企业的形象&#xff0c;面孔&#xff0c;客户有可能 不大会记得企业的某个东西&#xff0c;但是他们将会…

module java.base does not “opens java.xxx“ to unnamed module @xxxx

错误截图 在springboot集成dubbo中 消费者服务和生产者复核都报错 错误原因 高版本JDK禁止了报错所提示的几个包的反射 而dubbo里用到了 解决 看自己的报错里有几个包被禁止了 我这有两个java.math和java.lang 添加两个JVM启动参数 –add-opens java.base/java.mathALL…

Python爬虫之Scrapy框架爬虫实战

Python爬虫中Scrapy框架应用非常广泛&#xff0c;经常被人用于属于挖掘、检测以及自动化测试类项目&#xff0c;为啥说Scrapy框架作为半成品我们又该如何利用好呢 &#xff1f;下面的实战案例值得大家看看。 目录&#xff1a; 1、Scrapy框架之命令行 2、项目实现 Scrapy框架…

安卓手机当旁路网关

一、安卓shell调试工具下载【电脑版下载地址】安卓adb调试工具&#xff0c;包含MAC苹果、Windows和Linux 三种版【手机版下载地址Termux】下载地址&#xff1a;https://github.com/termux/termux-app/releases如果不懂下载哪个版本&#xff0c;可以直接下载通用版&#xff1a;t…