PAT 乙级 1030. 完美数列(25)

Myabae 2017-02-07 09:48:33
#include<stdio.h>
#include<stdlib.h>
int sort_function(const void *a,const void *b){
return *((double *)a)-*((double *)b);
}
int main()
{
int N,i,j,sum=0;
double p,a[100000],t;
scanf("%d %lf",&N,&p);
for(i=0;i<N;i++){
scanf("%lf",&a[i]);
}
qsort(a,N,sizeof(double),sort_function);
for(i=0;i<N;i++){
for(j=N-1;j>0;j--){
if(a[j]<=a[i]*p){
if(sum<j-i){
sum=j-i;
}
else{
break;
}
}
}
}
printf("%d\n",sum+1);
return 0;
}

我不知道怎样缩短运行时间。
...全文
167 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-02-07
  • 打赏
  • 举报
回复
在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可避开因局部数组大小超过默认堆栈大小1MB造成程序不能正常运行的问题。
自信男孩 2017-02-07
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<stdlib.h>


int sort_function(const void *a,const void *b)
{
    return *((double *)a)-*((double *)b);
}
int main()
{
    int N, i, j, sum = 0;
    double p, *a;

    scanf("%d%lf", &N, &p);

    a = (double *)malloc(sizeof(double) * N);
    if (!a) {
        fprintf(stderr, "malloc error!\n");
        return -1;
    }
    for(i = 0; i < N; i++)
        scanf("%lf", &a[i]);

    qsort(a, N, sizeof(double), sort_function);

    for(i = 0; i < N; i++){
        for(j = N-1; j > 0; j--){
            if(a[j] <= a[i] * p) {
                if(sum < j - i)
                    sum = j - i;
                else
                    break;
            }
        }
    }
    printf("%d\n",sum+1);
    free(a);
    return 0;
}
栈上的空间是有限的,不建议你在栈上申请太大的空间。需要多少就申请过少,但是C语言不支持可变数组,所以在栈上申请了空间。 对于缩小运行时间,从你这个程序里来讲,从减少循环次数开始吧,若想减少循环次数,那么就要从算法上考虑了。
Myabae 2017-02-07
  • 打赏
  • 举报
回复
还是有一组运行超时

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧