发表在 手把手教你C++ 08-24 17:54:15
一波水程序正在靠近~
童鞋们注意哦!
C++的后缀名是.cpp
例如: 1.cpp
而c的后缀名是.c
例如: 1.c
普及一下:
时间复杂度指的是:计算机在处理程序时所需要的时间
装个逼://不用看
一般情况下,算法的基本操作重复执行的次数是模块n的某一个函数f(n),因此,算法的时间复杂度记做:T(n)=O(f(n))。算法执行的时间的增长率和 f(n) 的增长率成正比, f(n) 越小,时间复杂度越低,效率也越高。 设f(n) = 一定数量级,若T(n)/f(n) 求极限可得到一常数c,则时间复杂度T(n) = O(f(n))
空间复杂度指的是:计算机在处理程序时所需要分配的内存空间
第一题:求1~10000自然数之和
这个很简单啊,只要改一下我的代码就行了!
直接上代码 ~ 时间复杂度:O(10000)
#include<iostream>
using namespace std;
int main()
{
int sum=0;
for(int i=1;i<=10000;i++)
sum=sum+i;//装逼写法:sum+=i; 等价于 sum=sum+i
cout<<sum;
return 0;
}
答案:50005000(手算)
第二种写法:时间复杂度:O(5000)
#include<iostream>
using namespace std;
int main()
{
int sum=0;
for(int i=1;i<=10000/2;i++)
sum=sum+i+(10001-i);
cout<<sum;
return 0;
}
思路:循环5000次,每次加上排在前面的小的数,和后面大的数
( 参照数学家高斯的做法:(1+10000)*(10000/2) )
第三种:时间复杂度:O(1)
直接赋sum的值为(1+10000)*(10000/2)
然后直接输出!!!//不用循环!!!
2.求1~100间的奇数之和
一个循环搞定!
#include<iostream>
using namespace std;
int main()
{
int sum=0;
for(int i=1;i<=100;i+=2)
sum=sum+i;
cout<<sum;
return 0;
}
答案:2500(没算过,相信计算机)
第三题:
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
答:执行2n(2*n)次;
时间复杂度为:O(2n)
”时间复杂度为:O(2n)“
是输入法限制?