我是靠谱客的博主 兴奋彩虹,最近开发中收集的这篇文章主要介绍算法学习系列2.1,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

均采用C++通过。

  • 1、子序列的和,多组数据输入 n< m<10^6,输出1/n^2+1/(n+1)^2+…+1/m^2,结束标记为m=n=0

    void subsequence(){

    long n[5],m[5];
    int k,i,j;
    //控制输入,这儿最多输入5组数据,学艺不精啊
    for(k = 0;k<5;k++){
        scanf("%ld%ld",&n[k],&m[k]);
        if(! (n[k]) && ! (m[k]) ) break;
    }
    //计算相应值,但注意超出范围。
    for(i =0;i<k;i++){
        long double sum = 0;
        for(j = n[i];j<=m[i];j++){
            sum += 1.0/(long double)(j*j);
        }
        printf("%.5lfn",sum);
    }
    

    }

  • 2、将1,2…9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:3的比例,试求出,输出所有满足条件的数

    void choise(int *a,int n){

    int i,j,k,temp;
    for(i=0;i<n-1;i++) {
        k=i; //给记号赋值
        for(j=i+1;j<n;j++)
            if(a[k]>a[j]) k=j; //是k总是指向最小元素
        if(i!=k) { //当k!=i是才交换,否则a[i ] 即为最小
            temp=a[i];
            a[i]=a[k];
            a[k]=temp;
        }
    }
    

    }

    void permutation(){

        //分析得最小一个组合的数的取值范围为123到333,看的网上的,我可没有分析出来啊。智商不够
        //用[m9]来装a,b,c得到数据
        int m[9];
        int copy,flag = 1;//flag 相等标记
        for(int a=123; a<=333; a++){  
            int b = 2*a;
            int c = 3*a;
    
            //将abc个位,十位,百位分出来,这儿是倒序,不影响
            for(int k= 0;k<3;k++){
                switch(k) {
                    case 0: 
                        copy =a;break;
                    case 1:
                        copy =b;break;
                    case 2:
                        copy =c;break;
                } 
                for(int i=0;i<3;i++){
                    if(i) copy = copy / 10;
                    m[i+3*k] = copy%10;
                }
            }
    
            //排序,这儿可以不排序,直接看有没有相等
            choise(&m[0],9);
            //判断是否相等
            for(int n= 0;n<8;n++){
                if(m[n]== m[n+1]|| !m[n]) flag =0;
            }
            if(flag)  printf("%d %d %dn",a,b,c);
            flag = 1;
    
        }
    

    }

  • 3、有编号1~n个灯泡,起初所有的灯都是灭的。有k个同学来按灯泡开关,如果灯是亮的,那么按过开关之后,灯会灭掉。如果灯是灭的,按过开关之后灯会亮。
    现在开始按开关。
    第1个同学,把所有的灯泡开关都按一次(按开关灯的编号: 1,2,3,……n)。
    第2个同学,隔一个灯按一次(按开关灯的编号: 2,4,6,……)。
    第3个同学,隔两个灯按一次(按开关灯的编号: 3,6,9,……)。求最后亮着的灯,输入n,k
    如输入7 3,输出1 5 6 7

    void switch_light(){

    for(int l = 0;l<1010;l++)
        a[l] = 1;
    //memset(a,1,sizeof(a));//将编号全赋值为0,1表示开灯,-1表示关灯
    int n,k;//n<=k<=1000
    scanf("%d%d",&n,&k);
    for(int i =2;i<=k;i++){             //i控制第几个人
        for(int j=1;j<=n;j++){          //j控制灯开关
            if(j*i>n)break;
            a[j*i] =a[j*i]  *(-1);
        }
    }
    for(int m = 1;m<=n;m++){
        if(a[m]==1) printf("%dt",m);
    }
    

    }

最后

以上就是兴奋彩虹为你收集整理的算法学习系列2.1的全部内容,希望文章能够帮你解决算法学习系列2.1所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部