油管视频《编程思维》中的题目,使用C语言编写出来,第三集,炉膛机器人

题目 :假设起初只有一个机器人,他的炉膛里有一个数字0,和另一个未知的任意生成的编码,随着推移,原始机器人自我复制,制造出更多一样的炉膛机器人,被原始机器人自我复制制造出的每一个子机器人的熔炉内,都继承了原始机器人未知的编码,并且有一个属于自己,独一无二的编码刻在外壳,第二代炉膛机器人,也通过同样的方法自我复制,永远将属于自己的编码,传承给自己的子机器人的熔炉,就这样传承了很多代,如今每一个炉膛机器人,都从自己母机器人那接受指令,所以请问该如何在一群机器人大军中,找到最原始的机器人。

 涉及编程的基础原理

1,递归思维:通过递归遍历机器人链,直到找到最原始的机器人。

2,指针和结构体:使用结构体来定义机器人的属性,并通过指针来链接机器人链。

3,链表:使用链表来表示机器人的继承关系。

具体程序的编写

//第一大部分,头文件,提供必要的库函数

#include <stdio.h>

#include <stdlib.h>//动态内存分配的库

#include <string.h>//字符串的标准库

//第二大部分,结构体定义,定义了机器人的数据结构,是整个程序的基础

typedef struct Robect{//typedef是一个关键字,用于现有数据类型定义一个新名字,struct用来定义结构体

        
    int furnaceCode;       // 炉膛编码
    int uniqueCode;        // 独一无二的外壳编码
    struct Robot *mother;  // 指向母机器人的指针

} Robect;//定义了一个robect的结构体

//第三大部分,创建机器人函数,动态创建机器人实际例子,并设置继承关系

Robot* createRobot(int furnaceCode, int uniqueCode, Robot *mother){//定义了一个函数createrobot用来创建新的机器人。

        Robect *newRobot=(Robot*)malloc(sizeof(Robot));//

       在堆上分配一块大小为 Robot 结构体的内存。将分配的内存地址转换为 Robot* 类型的指针。将这个指针赋值给 newRobot,使 newRobot 指向新分配的 Robot 结构体。

        newRobot->furnaceCode = furnaceCode;//设置新机器人的炉膛编码。

  newRobot->uniqueCode = uniqueCode;//设置新机器人的独一无二的外壳编码。

  newRobot->mother = mother;//设置新机器人的母机器人指针。

  return newRobot;//返回新创建的机器人指针。

}

//第四大部分,递归查找函数,用递归查找最原始的机器人

Robot* findOriginalRobot(Robot *robot){

//定义一个函数 findOriginalRobot,用于递归查找最原始的机器人。

        if(robot==NULL|| robot->mother==NULL){

        return robot;//如果当前机器人为空或母机器人指针为空,则返回当前机器人。

        }

        return findOriginalRobot(robot->mother);//否则,递归调用 findOriginalRobot,传入当前机器人的母机器人。

 }

//第五部分,主函数,程序的入口,负责创建机器人链,并调用 findOriginalRobot 函数查找最原始的机器人。它还负责输出结果和释放内存。

int main(){

        Robot *originalRobot = creatRobot(123,1,NULL);//创建原始机器人人,炉膛编码是123,外壳编码是1,没有母机器人

        Robot*robot2=creatRobot(123,2,original);//创建第二代机器人,继承炉膛编码为123,外壳编码为2,母机器人是originalRobot

        Robot *robot3=creatRobot(123,3,robot2);//创建第三代机器人,继承炉膛编码为123,外壳编码为3,母机器人为robot2

        Robot*robot4=creatRobot(123,4,robot3);//创建第四代机器人,继承炉膛编码123,外壳编码为4,母机器人为robot3

        Robot* foundOriginal=foundOriginalRobot(robot4);调用 findOriginalRobot 函数,从 robot4 开始 递归,查找最原始的机器人。

        if(foundOriginal != NULL){

        printf("The original robot has unique code: %d\n", foundOriginal->uniqueCode); 

        } else { printf("No original robot found.\n");}//判断是否找到最原始的机器人。如果找到,输出最原始机器人的独一无二的外壳编码。如果未找到,输出提示信息。

        free(originalRobot);

        free(robot2);

        free(robot3);

        free(robot4);//栈和堆的知识点掌握,释放分配的内存,防止内存泄漏。

        return 0;

}

以上程序只是作为初学者,纯纯自己比划,有不对请随时指正

  • 17
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值