🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
1030. 完美数列(25) 给定一个正整数数列,和正整数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 查看源代码 ``` #include<stdio.h> #include<stdlib.h> int cmp(void const *x,void const *y) { return *((double *)x)-*((double *)y); } int main() { int n,i,j,number=1; double p,*a; while(~scanf("%d%lf",&n,&p)) { a=(double *)malloc(n*sizeof(double)); for(i=0;i<n;i++) scanf("%lf",&a[i]); qsort(a,n,sizeof(double),cmp); for (i=0;i<n;i++) { for (j=i+number-1;j<n;j++) if (a[i]*p >= a[j]) { if (j-i+1 > number) number = j-i+1; } else break; } printf("%d\n",number); free(a); } return 0; } ```