【学习笔记】简单的算法题02

简单的算法题

问题1
在这里插入图片描述
代码示例

#include <iostream>
#include <iomanip>
using namespace std;
//主函数
void main()
{  
    int i;
    int f[21] = {0,1,0,1};
    int j, k, max, min;
    //求各元素的值
    for (i=4;i<21;i++){
        f[i]=f[i-1]+2*f[i-2]+f[i-3];
    }
    //输出结果
    cout<<"The results:"<<endl;
    for(i=1;i<21;i++){
        if (i%5==0){
            cout<<endl;
        }
        cout<<setw(10)<<f[i];
    }
    //求最大最大元素
    max = min = f[1];
    k = j = 1;
    for (i = 2; i < 21;i++) {
        if (max<f[i]) {
            max = f[i];
            k = i;
        }
        if (min>f[i]) {
            min = f[i];
            j = i;
        }
    }
    //输出最大最小元素
    cout << "\nmax:f[" << k << "]=" << max << ",min:f[" << j << "]" << min << '\n';
    }

结果
在这里插入图片描述
分析:
本题主要考察一维数组的应用,然后就是求最大最小值,总体难度不大。
问题2
在这里插入图片描述
代码分析

#include <iostream>
using namespace std;
//定义函数
void del_ch(char *p,char ch) {
    char *q = p;
    for (; *p != '\0';p++) {
        if (*p!=ch) {
            *q = *p;
            q++;
        }
    }
    *q = '\0';//添加字符串的结尾
}
//主函数
void main()
{ 
    void del_ch(char*, char);
    char str[80], ch;
    cout << "Input a string:\n";
    cin.getline(str,80,'\n');
    cout << "Input the char deleted:\n";
    cin>>ch;
    del_ch(str, ch);
    cout << "Then new string is:\n";
    cout << str << endl;
  }

结果
在这里插入图片描述
分析:
在这里插入图片描述
问题3
在这里插入图片描述

#include <iostream>
using namespace std;
//定义结构体变量
struct student {
    char id[8];//学号
    char name[10];//姓名
    bool sex;//性别
    float score;//成绩
};
//定义结构体数组
student st[3];
//定义输入函数
void input(int n) {
    cout << "从键盘输入" << n << "个同学的记录:" << endl;
    int i, k;
    student x;
    for (i=0;i<n;i++) {
        cin>>x.id;
        cin >> x.name;
        cin >> k;
        if (k == 1) {
            x.sex = true;
        }
        else {
            x.sex = false;
        }
        cin >> x.score;
        st[i] = x;
    }
}
//定义输出函数
void output(int n) {
    cout << "输出" << n << "个同学的记录:" << endl;
    cout << "--------------------------------------------------" << endl;
    cout << "学号" << '\t' << "姓名" << '\t' << "性别" << '\t' << "成绩" << endl;
    for (int i = 0; i < n;i++) {
        cout << st[i].id << '\t' << st[i].name << '\t';
        if (st[i].sex==true) {
            cout << "male" << '\t';
        }
        else {
            cout << "female" << '\t';
        }
        cout << st[i].score<<endl;
    }
}
//主函数
void main()
{ 
    int n;
    cout << "请输入学生的个数:";
    cin >> n;
    input(n);
    output(n);
  }

结果
在这里插入图片描述
问题4
建立一个链表,实现链表的增添数据和删除数据的操作
代码示例

#include <iostream>
using namespace std;
//定义节点结构体变量
struct node{
    int data;
    struct node* next;
};
//定义创建链表的函数
void creat(node *&head,int n) {//head为头指针变量
    if (n==0) {
        head = NULL;
        return;
    }
    cout << "从键盘输入" << n << "个整数:";
    int x;
    node *last, *p;
    last = head = NULL;
    p = new node;
    cin >> x;
    p->data = x;
    p->next = NULL;
    head = last = p;
    if (n==1) {
        return;
    }
    for (int i = 0; i < n - 1;i++) {
        p = new node;
        last->next = p;
        cin >> x;
        p->data = x;
        last = p;
    }
    p->next = NULL;
}
//输出链表的函数
void traverse(node *head) {
    node* p;
    p = head;
    while (p!=NULL) {
        cout << p->data << " " ;
        p = p->next;
    }
    cout << endl;
}
//删除节点的函数
void erase(node* &head,int no) {
    node* p, * p1;
    p = p1 = head;
    if (head==NULL) {
        cout << "链表为空,无节点可删" << endl;
        return;
    }
    else {
        if (p->data==no) {//删除头节点
            head = p->next;
            p = p->next;
        }
        else {//不是头节点则往下循环
            while (p->data!=no) {
                p1 = p;
                p = p->next;
            }
            if (p==NULL) {
                cout << "链表中没有要删除的节点" << endl;;
            }
            else {//找到删除的节点
                p1->next = p->next;
                delete p;//释放删除节点的空间
                cout << "删除节点成功!" << endl;
            }
        }
    }
}
//主函数
void main()
{ 
    node *head = NULL;
    int n;
    cout << "请输入节点的个数:";
    cin >> n;
    creat(head,n);//创建链表
    traverse(head);//输出链表各节点的数据
    cout << "输入要删除的数:";
    cin >> n;
    erase(head,n);//删除某个节点
    traverse(head); //输出删除该节点后的链表各节点的数据
  }

结果
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
电子图书资源服务系统是一款基于 Java Swing 的 C-S 应用,旨在提供电子图书资源一站式服务,可从系统提供的图书资源中直接检索资源并进行下载。.zip优质项目,资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目。 本人系统开发经验充足,有任何使用问欢迎随时与我联系,我会及时为你解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(若有),项目具体内容可查看下方的资源详情。 【附带帮助】: 若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步。 【本人专注计算机领域】: 有任何使用问欢迎随时与我联系,我会及时解答,第一时间为你提供帮助,CSDN博客端可私信,为你解惑,欢迎交流。 【适合场景】: 相关项目设计中,皆可应用在项目开发、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面中 可借鉴此优质项目实现复刻,也可以基于此项目进行扩展来开发出更多功能 【无积分此资源可联系获取】 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。积分/付费仅作为资源整理辛苦费用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值