题目 :假设起初只有一个机器人,他的炉膛里有一个数字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;
}
以上程序只是作为初学者,纯纯自己比划,有不对请随时指正
标签:编码,第三集,机器人,Robot,C语言,123,炉膛,newRobot From: https://blog.csdn.net/liyunlong1111/article/details/140679388