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");
}

原文地址:https://www.cnblogs.com/zhanggaofeng/p/5151071.html