第四周C语言学习总结


这周的学习时做到的两道比较有意思的题目,和大家分享分享。虽然是在学习C语言经典100题,网上的答案也很多,但我更希望能换不同的角度去重新学习并编写

古典问题(兔子生崽)

有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可)

首先,确立题目中出现兔子的三种属性
小兔子:经过两个月可以长成兔子并生出一对小兔子
一个月大的兔子:经过一个月可以长成兔子并生出一对小兔子
兔子:每个月生出一对小兔子

其次,做个流程图用于理清从小兔子变成兔子的流程

流程图

代码:

#include <stdio.h>

int main(int arg , const char **argv){
    int small_rabbits = 0;//小兔子
    int one_month_rabbits = 0;//一个月大的兔子
    int rabbits = 0;//兔子
    int month = 0;//经过的月份
    int sum = 0;//所有兔子的总数
    //根据属性判断一开始的兔子属于小兔子
    small_rabbits = 1;
    for (month = 1; month <= 40; month++)
    {
        //判断有多少兔子
        rabbits = rabbits + one_month_rabbits;
        //判断有多少一个月大的兔子
        one_month_rabbits = small_rabbits;
        //判断有多少小兔子
        small_rabbits = rabbits;
        sum = rabbits + one_month_rabbits +small_rabbits;
        //输出总的兔子的数量
        if (month == 1)
        {
            printf("%d month:%d\r\n",month,sum);
        }
        else
        {
            printf("%d months:%d\r\n",month,sum);
        }
    }
    return 0;
}



乒乓球比赛

两个乒乓球队进行比赛,各出三人。甲队为A,B,C三人,乙队为X,Y,Z三人。已抽签决定比赛名单。有人向队员打听比赛的名单.A说他不和X比,C说他不和X,Z比,请编程序找出三队赛手的名单。

#include <stdio.h>

int main(int arg,const char **argv){
    char first[3] = {'C','A','B'};//初始数组,按这样排序是根据条件个数来排的,只有这样才能将筛选后最后剩余的传给B
    char second[3] = {'X','Y','Z'};
    char group[3][2] = {0};//二维数组用来配对
    int times =0;
    int count = 0;
    for (times = 0; times < 3; times++)
    {
        group[times][0] = first[times];
    }//传入第一组数据用于筛选
    for (count = 0; count < 3; count++)
    {
        for (times = 0; times < 3; times++)
        {
            group[count][1] = second[times];
            if (group[count][0] == 'C' && group[count][1] == 'X')
            {
                continue;
            }
            else if (group[count][0] == 'C' && group[count][1] == 'Z')
            {
                continue;
            }
            else if (group[count][0] == 'A' && group[count][1] == 'X')
            {
                continue;
            }
            else if (group[count][1] == 0)
            {
                continue;
            }
            
            else
            {
                second[times] = 0;
                //将已经选择的替换成0,保证不会有重复选择
                break;
            } 
        }
    }
    for (count = 0; count < 2; count++)
    {
        for (times = 0; times < 3; times++)
        {
            printf("%c ",group[times][count]);
        }
        printf("\r\n");
    }
    return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值