回 帖 发 新 帖 刷新版面

主题:两个程序耗时不一样,怎么回事

两个程序实现相同的功能
第一个程序是用C和数组实现的,用时4500左右
第二个程序是用c++和向量容器实现的,用时1400左右

然我迷惑的是,用时多的那个程序在输入数据回车之后可以立即显示输出结果,用时少的那个程序输入数据回车之后要延迟一段时间才输出结果,这个是怎么回事啊???

程序一
[code=c]
//#include <iostream.h>
#include <stdio.h>
#include <time.h>

void main()
{
    time_t starttime,endtime,time;
    starttime=clock();


    int a,b,k,n,i,j,h,t,u,c[3000],d[3000];
    scanf("%d %d %d",&a,&b,&k);
    n=0;
    for(j=a;j<=b;j++)
    {
        for (i=1;i<=j-1;i++)
        {
            for (t=0,u=2;u<=i;u++)
                if(j%u==0 && i%u==0)
                {
                    t=1;
                    break;
                }
                if (t==0)
                {
                    n++;
                    c[n]=i;
                    d[n]=j;
                }    
        }
    }
    
    for(i=1;i<=n-1;i++)
        for(j=1;j<=n-i;j++)
            if (c[j]*d[j+1]>c[j+1]*d[j])
            {
                h=c[j];
                c[j]=c[j+1];
                c[j+1]=h;
                
                h=d[j];
                d[j]=d[j+1];
                d[j+1]=h;
            }
            
            printf("n=%d\n",n);
            printf("第%d项为:%d/%d\n",k,c[k],d[k]);

            endtime=clock();
            time=endtime-starttime;

            //cout<<"用时:"<<time<<endl;
            printf("用时:%d\n",time);
        
}
[/code]

程序二
[code=c]
#include <iostream>
#include <algorithm>
#include <vector>
#include <ctime>

using namespace std;

int main()
{
    long a,b,k,temp;
    time_t starttime,endtime,time;
    cin>>a>>b>>k;
    starttime=clock();
    
    vector<int> v1,v2;
    
    long coun=0;
    for (int i=a;i<=b;i++)
    {
        for (int j=1;j<i;j++)
        {
            int m=i;
            int n=j;
            while (m%n)
            {
                temp=m%n;
                m=n;
                n=temp;
            }
            if (n==1)
            {
                v1.push_back(i);
                v2.push_back(j);
                coun++;
            }
            
        }
        
    }
    int t1,t2;

    int p,q;
    
    for (q=0;q<k;q++)
    {
        for (p=v1.size()-2;p>=q;p--)
        {
            t1=v2[p]*v1[p+1];
            t2=v1[p]*v2[p+1];
            if (t1>t2)
            {
                swap(v1[p],v1[p+1]);
                swap(v2[p],v2[p+1]);
            }
            
        }
        
    }
    
    cout<<"真分数总数:"<<coun<<endl;
    cout<<"第k项为:"<<v2[k-1]<<"/"<<v1[k-1]<<endl;
    
    v1.clear();
    v2.clear();
    
    endtime=clock();
    time=endtime-starttime;
    
    cout<<"用时:"<<time<<endl;
    
    
    return 0;
}
[/code]

回复列表 (共3个回复)

沙发

程序一要等待键盘输入,移移位置就好了
但是没想到用stl会耗时多几倍

板凳

写上#define hongshu

3 楼

每个人都这样的,就相两条手臂不一样长一样TIME:2010-6-9 20:02

我来回复

您尚未登录,请登录后再回复。点此登录或注册