本人能力有限,发出只为帮助有需要的人。
以下为实验课的复盘,内容会有大量失真,请多多包涵。
此次实验限时一个小时,时间很紧张,很多内容可能并不准确。
输入输出如下;
输入:1
输出:A
输入:2
输出:ABA
输入:3
输出:ABACABA
题解如下
#include
void printLetter(int n)
{
if(n==0)//递归出口
return;
printLetter(n-1);//进行前后两轮递归,构建字母组成的结构
printf("%c",n+'A'-1);//输出字母
printLetter(n-1);
}
int main(void)
{
int x;
scanf("%d",&x);
printLetter(x);
return 0;
}
此题给出了一个小恐龙吃鸡肉的情景。虽然源代码很长,但编码的难度极低,基本只需要理解结构体的组成。填空的地方只需要复制粘贴,在此就不赘述了。
输入一组坐标(x>=1且y>=1)作为终点,以在第一象限中的(1,1)为起始点,计算从起始点到终点需要走的步数。
输入:3 3
输出:4
原题为(注释处为缺少的空)
此题空的位置比较刁钻,记忆的版本和现实可能有误差
#include
/*
*/
int findStep(int m,int n)
{
if(/* */)
/*
*/
return findStep(m-1,n)+/* */;
}
int main (void)
{
int m,n;
scanf("%d %d",&m,&n);
printf("%d",findStep(m,n));
return 0;
}
一种题解(可能和想考的不一样)
#include
int flag=0;//设置flag为全局变量,标记走过的步数
int findStep(int m,int n)//此题原点出发只有两个方向,不用回溯
{
if(m==1&&n==1)//注意此题的出发点是(1,1)则此处为递归出口
return flag;
flag++;
if(m>1)//保证m不会越界
return findStep(m-1,n);
if(n>1)//保证n不会越界
return findStep(m,n-1);
return 0;
}
int main (void)
{
int m,n;
scanf("%d %d",&m,&n);
printf("%d",findStep(m,n));
return 0;
}
此题和oj期末考试(2.23)的题干一致,但此题作为填空题,我没能在考试时间内理解其代码想表达意思,就不在这里写了。有需要的可以看看期末考试(2.23)中的解法。
给出一个结构体链表,包含姓名、学号、年龄三个要素。输入一个n,要求输入n个三要素后,再输入一个数字,删除年龄为这个数字的链表节点,并输出链表。
输入:
3
1 zhangsan 18
2 lisi 19
3 wangwu 18
18
输出
2 lisi 19
题解如下
#include
#include
struct cell
{
int x;
char name[1000];//字符数字储存姓名
int age;
struct cell* next;
};
struct cell *build(int num)//输入链表
{
struct cell *tmp;
struct cell *headA = (struct cell*)malloc(sizeof(struct cell));
scanf("%d %s %d",&headA->x,headA->name,&headA->age);//注意字符串的输入方法
struct cell *end = headA;
for(int i=0; ix,tmp->name,&tmp->age);
end->next = tmp;
end = tmp;
}
end->next = NULL;
return headA;
}
void print(struct cell* head)//输出链表
{
struct cell* p;
p=head;
while(p!=NULL)
{
printf("%d %s %d\n",p->x,p->name,p->age);
p=p->next;
}
}
void release(struct cell* head)//释放链表所占用的空间
{
struct cell *p,*tmp;
p=tmp=head->next;
while(p!=NULL)
{
tmp=p;
p=p->next;
free(tmp);
}
p=head=tmp=NULL;
}
struct cell* delCell(struct cell *head,int n)
{
while(head->age==n)//当头节点的值要删除时,将头节点向后挪
head=head->next;
struct cell *p,*p0;
p=head;
while(p!=NULL)
{
if(p->age==n)//删除节点的标准操作
{
p0->next=p->next;
p=p0;
}
p0=p;
p=p->next;
}
return head;
}
int main(void)
{
struct cell*head;
int num,n;
scanf("%d",&num);
head=build(num);
scanf("%d",&n);
head=delCell(head,n);
print(head);
release(head);
return 0;
}