c++编程课+机器学习第一节

编程:

1、程序=算法+数据结构+(文档)算法指的是方法、数据结构是对数据的存储,文档是注释等。

算法的特性:确定性(固定的执行顺序,一定的输入有固定的结果)/有限性(在规定的时间和步数内完成)/可行性/输入(0-n)/输出(1-n)注:没有输出的变量和代码段会在编译的时候被优化,在汇编语言中不会出现。

2、给定32位有符号整数,a,b,c,输出ax^2+bx+c=0的解的个数

题目理解:

a!=0 的时候 b^2-4ac>0  两个解,等于 1个解,小于0个解 

a=0 的时候 b=0的时候 0个解,b不等于0 1个解

注意:32位有符号的数,需要用long long来解。但是long long的时候4ac仍然会溢出。所以需要使用b^2/4ac比较。

且需要注意:浮点数与浮点数不能说等于,因为浮点数有16位是精确的

void result_number()
{
    long long a,b,c;
    scanf("%lld%lld%lld",&a,&b,&c);
    if(!a &&!b &&!c) cout<<"inf";
    else if(!a&& !b) cout<<0;
    else if(!a) cout<<1;
    else if(a== -(111<<31) && c== -(111<<31)) cout<<0;//越界的一种情况,单独考虑
    else if(a*c<0) cout<<2;
    else if(b*b > a*c*4ull) cout<<2;//确定ac一定可以不是负数就可以用unsigned long long 了
    else if(b*b==a*c*4ull) cout<<1;
    else if(b*b < a*c*4ull) cout<<0;
}

3、时间复杂度:O

n/1+n/2+n/3+.......+n/n = nlnn

\sqrt{1}+\sqrt{2}+\sqrt{3}+\sqrt{4}+......+\sqrt{n}=对根号x1求微分= \tfrac{2}{3}*n^(\tfrac{3}{2})

4、怎么求一个年分是不是有效的

void is_effective ()
{
    int y,m,d; scanf("%d:%d:%d",&y,&m,&d);
    bool is_legal=( (y>0)&&(m>0 && m<13)&&
                   (m==2 && d>0 && d<28+(y%400==0 || y%100 && y%4==0))&&
                   (m!=2 && d>0 && d<30+(0x15AA>>m)&1)  );
    cout<<(is_legal?"Yes":"No");
    return ;
}

 判断一个年份是不是闰年:(y%400==0 || y%100 && y%4==0,并且是闰年的话是28+1!!!写的真好

写的更好的是判断一个月份是不是大月(0x15AA>>m)&1,其中0x15AA是16进制,如果那个月是大月那么对应位就是1.。那么m是几右移之后最后一位一定是1,和1做与操作,得到的结果就是1。

5、求素数的方法:

第一种:

bool solution1(int n)
{
    bool is=true;
    for(int i=2;i*i<=n;i++)//i不能遍历到n
    if(n%i==0) return false;
    return true;
}

第二种:筛发:时间复杂度 O(nlnn),对每一个数开始考虑他是不是i的倍数

const int maxn=1000100;
bool prime[maxn]={};
bool solution2(int n)
{
    for(int i=2;i<=n;i++)  prime[i]=true;
    for(int i=2;i<=n;i++)
        for(int j=i*2;j<=n;j+=i)//注意等于号需要遍历到n
        prime[j]=false;
    return prime[n];
}

 第三种:

bool solution3(int n)//大于等于5的质数一定和6的倍数相邻
{
    if(n==2||n==3) return true;
    if(n%6!=1 && n%6!=5) return false;
    for(int i=5;i*i<=n;i+=6)
        if(n%i==0 || n%(i+2)==0) return false;
    return true;
}

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值