主题:两个程序耗时不一样,怎么回事
两个程序实现相同的功能
第一个程序是用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]
第一个程序是用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]