首页 > 其他分享 >【练习】完美数列:给定一个正整数数列,和正整数p,设这个数列中的最大值是M,最小值是m,如果M <= m * p,则称这个数列是完美数列。

【练习】完美数列:给定一个正整数数列,和正整数p,设这个数列中的最大值是M,最小值是m,如果M <= m * p,则称这个数列是完美数列。

时间:2024-12-30 15:30:00浏览次数:3  
标签:正整数 数列 完美 max rep long int

题目

给定一个正整数数列,和正整数p,设这个数列中的最大值是M,最小值是m,如果M <= m * p,则称这个数列是完美数列。
现在给定参数p和一些正整数,请你从中选择尽可能多的数构成一个完美数列。

输入格式:
输入第一行给出两个正整数N和p,其中N(<= 105)是输入的正整数的个数,p(<= 109)是给定的参数。第二行给出N个正整数,每个数不超过109。

输出格式:
在一行中输出最多可以选择多少个数可以用它们组成一个完美数列。

输入样例:

10 8
2 3 20 4 5 1 6 7 8 9

输出样例:

8
1

来源:PAT 1030 完美数列
——————————————————————

思路(注意事项)

  1. a[i]*p可能会超过int所能表示范围,所以定义用long long。

  2. sort(a, a + n); 指的是将a[0]~a[n-1]的数组元素进行排序
    sort(first,last) first 和 last 是迭代器,表示要排序的范围。 注意,last 指向的是范围末尾的下一个位置,不包含在排序范围内。 (需要头文件algorithm)

  3. 本题难点,双层循环中,第二层循环的编写,利用之前计算得到的 max_cont 来减少不必要的比较,从而优化性能。

——————————————————————

题解

#include<iostream>
#include<algorithm>
#include<cmath>
#define rep(i , a , n) for(int i = a; i < n; i++)
using namespace std;
int main()
{
	int n, max_cont = 1;//max_cout为完美数列的个数 
	long long p;
		cin >> n >> p;
	long long a[n];//a[i]*p可能会超过int所能表示范围
	rep(i, 0, n)
		cin >> a[i];
	sort(a, a + n);//对传入的所有数进行排序 
	rep(i, 0, n) //外层循环遍历数组 a 的每一个元素,作为子序列的起始位置,也即最小值
	{
		rep(j,i + max_cont, n) //从当前起始位置 i 加上当前已知的最大连续长度 max_cont 开始,遍历数组。
		{
			if(a[j] <= a[i] * p)  //满足,则更新 max_cont 为当前子序列的长度 j - i + 1
				max_cont = j - i + 1;
			else  //不满足,则跳出内层循环,因为后续的元素只会更大
				break;
		}
	}
	cout << max_cont;//输出构成完美数列的数的个数 
	return 0;
}

标签:正整数,数列,完美,max,rep,long,int
From: https://blog.csdn.net/2402_86344613/article/details/144821565

相关文章

  • 高等数学学习笔记 ☞ 数列与数列的极限
    1. 数列基本概念1.定义:就是以正整数集(或它的有限子集)为定义域的一列有序的数。备注:①:数列中的每一个数叫做这个数列的项。②:排在第一位的数称为这个数列的第1项(通常也叫做首项),以此类推,排在第位的数称为这个数列的第项。2.一般形式:。记作:,其中称为该数列的通项,为正......
  • 【完美复现】基于多智能体系统一致性算法的电力系统分布式经济调度策略(Matlab代码实现
    ......
  • C++中的完美转发
    完美转发背景:C++的参数传递常常面临以下问题:左值和右值:左值和右值在处理上有区别,通常左值被传递时需要按值传递,而右值可能会被按引用传递以避免不必要的拷贝引用折叠(ReferenceCollapsing):C++中的引用折叠规则(T&&类型的引用会折叠成不同的类型)也会影响完美转发的实现需......
  • 从高并发到企业级应用:C# 和 Go 的完美结合
    在现代软件开发中,随着微服务架构和分布式系统的广泛应用,开发者需要应对各种高并发、高性能的需求。而在选择编程语言时,C#和Go是两种非常流行且各具优势的语言,分别擅长不同的应用场景。C#,以其强大的企业级开发支持和丰富的生态系统在后端、桌面和Web开发中占据重要地位;而......
  • 矩阵快速幂——斐波那契数列进一步优化
    快速幂优化矩阵幂、乘法对于一般的矩阵计算有\(A_{m,n}*B_{n,p}=C_{m,p}\),其中作为乘积因子的两个矩阵必须满足前因子列数与后因子行数相同积的行数等于前因子的行数,列数等于后因子的列数,任意的\(c_{i,j}\)可由定义的计算得出\(c_{i,j}=\sum_{k=0}^{n}a_{i,k}*b_{k,j}\)......
  • C中如何实现斐波那契数列的迭代和递归算法?
    在C语言中实现斐波那契数列的迭代和递归算法是学习编程和算法设计的重要部分。本文将详细介绍这两种方法的实现原理,并提供具体的代码示例。递归算法递归算法是通过函数调用自身来解决问题的一种方法。对于斐波那契数列,递归算法的实现基于其定义:第n项等于前两项之和。递归算法......
  • 使用js写一个方法将一个正整数分解质因数,输出为数组
    你可以使用以下的JavaScript函数来将一个正整数分解为质因数,并将结果输出为数组:functionprimeFactors(n){letfactors=[];letdivisor=2;//判断输入是否为正整数if(n<=0||!Number.isInteger(n)){thrownewError('Inputmustbeapo......
  • 栈实现队列,寻找正整数的下一个数
    6.用栈模拟队列题目用栈来模拟一个队列,要求实现队列的两个基本操作:入队、出队。思路用两个栈,一个栈用来存储入队元素,另一个栈用来存储,出队元素。比如,有两个栈A,B,入队元素,先进入到栈A,每次元素要出队时,就把栈A的元素依次出栈,进入到栈B,再从栈B出栈,来模拟元素出队。代码publicc......
  • 企业智能化升级的得力助手:思沃克 NexGPT 与 Dify 平台完美搭配
    在当下数字化浪潮汹涌澎湃的商业环境里,企业想要站稳脚跟、脱颖而出,借助人工智能提升自身实力已然成为必由之路。今天,就给大家实实在在地讲讲思沃克NexGPT和Dify平台是如何紧密协作,不仅为企业内部运营带来革新,还在面向外部客户的客服场景中大放异彩,助力企业实现全方位智能化跨......
  • PTA 正整数A+B(15分)
    正整数A+B题的目标很简单,就是求两个正整数A和B的和,其中A和B都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。输入格式:输入在一行给出A和B,其间以空格分开。问题是A和B不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱......