作业答案 by day3(第三课)

发表在    手把手教你C++ 08-24 17:54:15

1 2533 2

一波水程序正在靠近~

童鞋们注意哦!

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)


登录或注册后发布评论