PAT --- 1030. 完美数列(25)

1030. 完美数列(25)

时间限制
300 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CAO, Peng

给定一个正整数数列,和正整数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

前言:新学期第一次刷题,有点懵,所以有两个测试点不给过。暂不深究!个人感觉思路还是正确的。用一个计数x,找到数组中最大的元素,如果满足条件,x则加一。


代码:

/************************************************************************/  
/* Author: Lcy 
/* Mail: [email protected] 
/* Bolg: http://blog.csdn.net/MissXy_ 
/* Describe: PAT乙级 1030. 完美数列(25)
/* Date: 2018-3-6
/************************************************************************/
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

int main()
{
	int N, p, num, x = 0;
	vector<int> iArray;
	cin>> N>> p;
	for (int i = 0; i < N; i++)
	{
		cin>> num;
		iArray.push_back(num);
	}
	// 找到数组中最大元素位置
	vector<int>::iterator max = max_element(begin(iArray), end(iArray));
	
	// 遍历vector
	int count = iArray.size();
	for (int i = 0; i < count; i++)
	{
		if ((*max) <= iArray[i]*p){		//满足条件 计数加1
			x++;
		}
	}
	cout<< x;
	return 0;
}

附上网友通过代码:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
    int n;
    long long p;
    scanf("%d%lld", &n, &p);
    vector<int> v(n);
    for (int i = 0; i < n; i++)
        cin >> v[i];
    sort(v.begin(), v.end());
    int result = 0, temp = 0;
    for (int i = 0; i < n; i++) {
        for (int j = i + result; j < n; j++) {
            if (v[j] <= v[i] * p) {
                temp = j - i + 1;
                if (temp > result)
                    result = temp;
            } else {
                break;
            }
        }
    }
    cout << result;
    return 0;
}


猜你喜欢

转载自blog.csdn.net/missxy_/article/details/79453141
今日推荐