temp

作者: 余生筑 | 来源:发表于2019-01-15 17:17 被阅读25次
    • memset函数
    #include<cstring>
    
    int a[100];
    memset(a,0,sizeof(a));
    

    vector

    • 错误写法
    vector<double> cou_aver;
    cou_aver[j]+=score;
    
    • sort函数
    sort(pros.begin(),pros.end(),cmp);
    

    • 每月天数
    int each[12]= {31,28,31,30,31,30,30,31,30,31,30,31};
    
    • 判断闰年
    bool IfRun(int n)
    {
        if(n%100==0)
        {
            if(n%400==0)
                return true;
        }
        else
        {
            if(n%4==0)
                return true;
        }
        return false;
    }
    
    • 判断素数
    bool isPrime(int n)
    {
        if(n==1) //1不是素数
        return false;
        int sqr=(int)sqrt(1.0*n);
        for(int i=2;i<=sqr;i++)
        {
            if(n%i==0)
                return false;
        }
        return true;
    }
    
    • 获取100以内素数,存于数组prime
    #include <iostream>
    #include<cstring>
    using namespace std;
    const int maxn=101;
    int prime[maxn],pNum=0;
    bool p[maxn];
    void Find_Prime()
    {
        for(int i=2;i<maxn;i++)
        {
            if(p[i]==false)
            {
                prime[pNum++]=i;
                for(int j=i+i;j<maxn;j+=i)
                {
                    p[j]=true;
                }
            }
        }
    }
    int main()
    {
        memset(p,false,sizeof(p));
        Find_Prime();
        for(int i=0;i<pNum;i++)
        {
            printf("%d ",prime[i]);
            //2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
        }
        return 0;
    }
    
    • 将n进行质因数分解,结果存于fac数组
    //详见算法笔记P168
    #include <iostream>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int maxn=100010;
    int prime[maxn],pNum=0;
    bool p[maxn];
    bool isPrime(int n)
    {
        if(n==1)
            return false;
        int sqr=(int)sqrt(1.0*n);
        for(int i=2; i<=sqr; i++)
        {
            if(n%i==0)
                return false;
        }
        return true;
    }
    void Find_Prime()
    {
        for(int i=2; i<maxn; i++)
        {
            if(p[i]==false)
            {
                prime[pNum++]=i;
                for(int j=i+i; j<maxn; j+=i)
                {
                    p[j]=true;
                }
            }
        }
    }
    struct factor
    {
        int x;
        int cnt;
    } fac[10];
    int fNum=0;
    void getFac(int n)
    {
        int sqr=(int)sqrt(1.0*n);
        for(int i=0; i<pNum&&prime[i]<=sqr; i++)
        {
            if(n%prime[i]==0)
            {
                fac[fNum].x=prime[i];
                fac[fNum].cnt=0;
                while(n%prime[i]==0)
                {
                    fac[fNum].cnt++;
                    n/=prime[i];
                }
                fNum++;
            }
            if(n==1)
                break;
        }
        if(n!=1)
        {
            fac[fNum].x=n;
            fac[fNum].cnt=1;
            fNum++;
        }
    }
    int main()
    {
        memset(p,false,sizeof(p));
        Find_Prime();
        getFac(180);
        cout<<"对于180"<<endl;
        for(int i=0; i<fNum;i++)
        {
           cout<<"质因子"<<fac[i].x<<"个数为"<<fac[i].cnt<<endl;
        }
        return 0;
    }
    /*
    对于180
    质因子2个数为2
    质因子3个数为2
    质因子5个数为1
    */
    
    • 找一个数的约数,存于divs数组
    #include<iostream>
    #include<cstring>
    using namespace std;
    int divs[100],dnum=0;
    void getDiv(int n)
    {
        memset(divs,0,100);
        for(int i=1; i<=n/2; i++)
        {
            if(n%i==0)
            {
                divs[dnum]=i;
                dnum++;
            }
        }
    }
    int main()
    {
        getDiv(220);
        cout<<220<<"的约数为";
        for(int j=0; j<dnum; j++)
        {
            cout<<divs[j]<<" ";
        }
        return 0;
    }
    //220的约数为1 2 4 5 10 11 20 22 44 55 110
    
    //详见算法笔记P185
    #include<iostream>
    #include<cstring>
    using namespace std;
    long long C(long long n,long long m)
    {
        long long ans=1;
        for(long long i=1;i<=m;i++)
        {
            ans=ans*(n-m+i)/i;
        }
        return ans;
    }
    int main()
    {
        cout<<C(3,2)<<endl;//3
        return 0;
    }
    
    • cmp函数
    bool cmp(cal a,cal b)
    {
        if(abs(a.val)!=abs(b.val))
            return abs(a.val)>abs(b.val);
        else if(a.row!=b.row)
            return a.row>b.row;
        else
            return a.col>b.col;
    
    • C的合法标识符
    1.首字母不能以数字开头
    2.在字符串中,只能有字母,数字,下划线
    
    • getline格式
    while(cin>>n)
        {
            char c=getchar();;
           for(int i=0;i<n;i++)
           {
               string str;
              getline(cin,str);
              cout<<str<<endl;
           }
        }
    /*3
    wqe rtr
    sd ioio
    sdssd*/
    
    • 关于ASCII码

    字母ASCII码

    A-Z:65~90
    a-z:97~122
    
    cout<<('a'-96)*100;//100
    cout<<'b'-'a'+'A'//'B'
    cout<<'a'-'A'//32
    cout<<'A'+32//97
    cout<<char('A'+32)//a
    

    汉字ASCII码

    1.小于0
    2.占两个字节//一个字母占1个字节
    
        cin>>str;
        for(int i=0;i<str.length();i++)
        {
            cout<<str[i]-'0'<<" ";
        }
    /*输入:东风破
    输出:-98 -94 -117 -136 -113 -134
    */
    

    str[i]>=65

    string str;
    cin>>str;
    for(int i=0;i<str.length();i++)
        {
            if(str[i]>=97&&str[i]<=122)
                cout<<"s";
            if(str[i]>=65&&str[i]<=97)
                cout<<"b";
        }
        return 0
    /*输入:abcdeABCDE
    输出:sssssbbbbb
    */
    
    • 输入字符串

    字符串带空格

     string str;
     while(getline(cin,str))
     {
         cout<<str<<endl;
     }
    /*
    输入:sdsd dsds
    输出:sdsd dsds
    */
    
        cin>>n;
        char c=getchar();
        for(int i=0; i<n; i++)
        {
            string str;
            getline(cin,str);
            cout<<str<<endl;
        }
    /*
    输入:2
    sdsd dsds
    yu io io
    输出:
    sdsd dsds
    yu io io
    */
    

    字符串不带空格

        cin>>n;
        for(int i=0; i<n; i++)
        {
            string str;
            cin>>str;
            cout<<str<<endl;
        }
    /*
    输入:2
    sdsddsds
    yuioio
    输出:
    sdsddsds
    yuioio
    */
    
    • 统计单词个数(输入数据只有一行)
    #include<iostream>
    #include<vector>
    #include<string>
    #include<stdio.h>
    using namespace std;
    int main()
    {
        string word;
        vector<string> words;
        while(cin>>word)
        {
            words.push_back(word);
            char c=getchar();//利用getchar()判断换行
            if(c=='\n')
                break;
        }
        int size=words.size();
        cout<<size<<endl;
        return 0;
    }
    /*you are my friend
      4*/
    
    • 统计单词个数(输入数据有多行,遇到#终止)
    #include<iostream>
    #include<vector>
    #include<string>
    using namespace std;
    int main()
    {
        string str;
        vector<string> words;
        while(getline(cin,str))
        {
            if(str[0]=='#')
                return 0;
            int count=0;
            bool new_w=false,still=false;
            for(int i=0; i<str.length(); i++)
            {
                if(str[i]!=' '&&new_w==false&&still==false)
                {
                    count++;
                    new_w=true;
                    still=true;
                }
                else
                {
                    if(str[i]!=' ')
                    {
                        still=true;
                    }
                    else
                    {
                        still=false;
                    }
                    new_w=false;
                }
            }
            cout<<count<<endl;
        }
        return 0;
    }
    /*输入:             you              are     my  friend               */
    /*输出:4              
    
    • if(b)
    int b=0;
       if(b)
        cout<<"b is not zero"<<endl;//输出:b is not zero"
    
    • 最大公约数
    //辗转相除法
    int gcd(int m,int n)
    {
        if(!n)
            return m;
        else
            return gcd(n,m%n);
    }
    
    • 最小公倍数(基于gcd)
    int lcm(int m,int n)
    { 
        int res=gcd(m,n);
        return m/res*n;
    }
    
    10^9以内,用int型
    10^10及以上,用long long型
    

    数论

    • 计算只包含加法、减法和乘法的整数表达式除以正整数n的余数,可以在每步计算之后对n取余,结果不变。
    • Lagrange 四平方定理: 任何一个正整数都可以表示成不超过四个整数的平方之和。
    • 质因子结论:对于一个正整数n来说,如果它存在[2,n]范围内的质因子,
      要么这些质因子全部小于等于sqrt(n),要么只存在一个大于sqrt(n)的质因子,而其余质因子全部小于等于sqrt(n)。

    几何

    • 三角形ABC的面积
      假设向量AB=(bx,by);向量AC=(cx,cy);则S=(bxcy-cxby)/2;
      参考资料
    多边形可划分为多个三角形

    S=s1+s2+s3+...+sn;其中si计算方法同上

    • 按位右移运算符(>>)
    将数据除以2^n(2的n次方)
    
        int sum=48>>3;
        cout <<sum<< endl;//6
    
    • 按位左移运算符(<<)
    将数据乘以2^n(2的n次方)
    
        int sum=3<<3;
        cout <<sum<< endl;//24
    

    while

     while(n>0)
        {
            while(num>0)
            {
                num--;
                n--;
            }
        }
        cout<<n<<endl;//-7
    
    • 输出从数组num中从A到B的数;
      每 10 个数字占 1 行,其间以空格分隔;
      但行末不得有多余空格。
    /*
    11 13 17 19 23 29 31 37 41 43
    47 53 59 61 67 71 73 79 83 89
    97 101 103
    */
    for(int i=A-1;i<B;i++)
        {
        count++;
        count%=10;
        if(count!=0)
        {
            if(count!=1)
                cout<<" ";
            cout<<num[i];
        }
        else
            cout<<" "<<num[i]<<endl;
        }
    

    相关文章

      网友评论

          本文标题:temp

          本文链接:https://www.haomeiwen.com/subject/ajyydqtx.html