• C语言 百炼成钢8


    //题目22:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定
    //比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x, z比,请编程序找出
    //三队赛手的名单。
    
    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    
    //分析:c说他不和x, z比,那么确定c--y;a说他不和x比,那么确定a--z,剩下的就是b--x;
    
    void main(){
        char ch1=0, ch2=0,ch3=0;
        for (ch1 = 'x'; ch1 < 'z'+1; ch1++)
        {
            for (ch2 = 'x'; ch2 < 'z'+1; ch2++)
            {
                if (ch1 != ch2)
                {
                    for (ch3 = 'x'; ch3 < 'z'+1; ch3++)
                    {
                        if ((ch1 != ch3)&&(ch2!= ch3))
                        {
                            if ((ch3 != 'x') && (ch3 != 'z') && (ch1 != 'x'))
                            {
                                printf("
    三队赛手的名单A==%c;B==%c;C==%c", ch1, ch2, ch3);
                            }
                        }
                    }
                }
            }
        }
        system("pause");
    }

    //题目23:打印出如下图案(菱形)
    
    
    
    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    
    //分析:出现行,列那么就需要使用for循环
    //一种方案  行一个for循环,把这个图形看成上下两部分,再用2个for循环
    //我的方案我画菱形,一般是画一个正方形,4个正方形就可以拼成一个菱形
    //
    
    
    void main(){
        //
        for (int i = 3; i>-4; i--)
        {
            //空白列
            for (int j = 0; j < abs(i); j++)
            {
                printf(" ");
            }
            //*号列
            //4-abs(i)-1;这里的4是一个正方形的宽,4-abs(i)是求出一个正方形内*号的个数
            //菱形的上半部部分是2个正方形,但是2个正方形共用了中间竖着的一条*,所以4-abs(i)-1,挖去中间一条
            //2 * (4 - abs(i) - 1)就是刨除中间一个*后的个数
            //2 * (4 - abs(i) - 1) + 1把中间一个*再加上
            for (int j = 0; j < 2 * (4 - abs(i) - 1) + 1; j++)
            {
                printf("*");
            }
            //每行换行
            printf("
    ");
        }
        system("pause");
    }

    //题目24:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和
    
    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    
    //分析,通过观察,分子的规律是f(n)=f(n-1)+f(n-2);分母也有类似的规律
    //这个可以用递归实现,但是递归实现f(n)=f(n-1)+f(n-2)没有数组效率,所以用数组实现
    //因为分子分母相差1,所以我可以忽略分子,只要构建分母的数组就可以了
    
    void main(){
        int arr[30] = { 1,2 };
        //这里我构建是30个元素的数组而不是20个,是因为分子与分母相差了1一个,正确应该是21,我为了简便直接定义了30个
        //给数组赋值
        for (int i = 2; i < 30; i++)
        {
            arr[i] = arr[i - 1] + arr[i - 2];
        }
        double sun = 0.0;
        for (int i = 0; i < 20; i++)
        {
            sun += (double)arr[i + 1] /(double) arr[i];
        }
        printf("这个数列的前20项之和是%lf", sun);
        system("pause");
    }

  • 相关阅读:
    BZOJ2199[Usaco2011 Jan]奶牛议会——2-SAT+tarjan缩点
    BZOJ3862Little Devil I——树链剖分+线段树
    BZOJ2325[ZJOI2011]道馆之战——树链剖分+线段树
    BZOJ1018[SHOI2008]堵塞的交通——线段树
    BZOJ2733[HNOI2012]永无乡——线段树合并+并查集+启发式合并
    BZOJ4127Abs——树链剖分+线段树
    bzoj 4753 最佳团体
    bzoj 4472 salesman
    bzoj 5369 最大前缀和
    bzoj 1226 学校食堂Dining
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/5151071.html
Copyright © 2020-2023  润新知