BJFU数据结构顺序表部分题解整合

204、基于顺序存储结构的图书信息表的创建和输出

描述

定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据来完成图书信息表的创建,然后统计图书表中的图书个数,同时逐行输出每本图书的信息。

输入

输入n+1行,其中前n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。最后第n+1行是输入结束标志:0 0 0(空格分隔的三个0)。其中书号和书名为字符串类型,价格为浮点数类型。

输出

总计n+1行,第1行是所创建的图书表中的图书个数,后n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔。其中价格输出保留两位小数。

输入样例 1
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
0 0 0
输出样例 1
8
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
AC代码(C++)
#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

typedef struct  // 定义一个书结构体
{
    
    
    string ibsn;
    string name;
    double price;
}Book;

const int MaxSize = 10010; // 定义顺序表最长长度

// 1、创建一个顺序表
Book books[MaxSize];

int main()
{
    
    
    // 2、初始化顺序表,此类型不必初始化
    
    // 3、进行顺序表的建立
    int n = 0; // 遍历次数
    while (1)
    {
    
    
        cin >> books[n].ibsn >> books[n].name >> books[n].price;
        
        if (books[n].price == 0) break; // 当输出 3 个 0 时,输出结束

        n ++;
    }

    // 重载排序
    // sort(SqList, SqList + n);

    // 4、输出
    cout << n << endl;
    for (int i = 0; i < n; i ++)
    {
    
    
        cout << books[i].ibsn << " " << books[i].name << " ";
        printf("%.2lf\n", books[i].price); // 题目要求
    }

    return 0;
}

205、基于顺序存储结构的图书信息表的排序

描述

定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据完成图书信息表的创建,然后将图书按照价格降序排序,逐行输出排序后每本图书的信息。

输入

输入n+1行,前n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。最后第n+1行是输入结束标志:0 0 0(空格分隔的三个0)。其中书号和书名为字符串类型,价格为浮点数类型。

输出

总计n行,每行是一本图书的信息(书号、书名、价格),书号、书名、价格用空格分隔。其中价格输出保留两位小数。

输入样例 1
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
0 0 0
输出样例 1
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787302164340 Operating-System 50.00
9787822234110 The-C-Programming-Language 38.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257646 Data-Structure 35.00
9787302219972 Software-Engineer 32.00
AC 代码
#include <iostream>
#include <cstring>
#include <algorithm> // sort函数在这个库中

using namespace std;

typedef struct // 建立书结构体
{
    
    
    string ibsn;
    string name;
    double price;
}Book;

const int MaxSize = 10010;
Book books[MaxSize]; // 定义Book类型的顺序表

bool operator < (const Book &a, const Book &b) // 重载小于号
{
    
    
    return a.price > b.price; // 由于题目要求是降序价格输出
}

int main()
{
    
    
    int n = 0;
    
    while (1) // 1、建立顺序表
    {
    
    
        cin >> books[n].ibsn >> books[n].name >> books[n].price;
        
        if (books[n].price == 0) break; // 输入三个0时终止输入
        
        n ++; // 注意这个n ++的操作需要在break语句后面
    }
    
    sort(books, books + n); // 2、利用重载特性排序
    
    for (int i = 0; i < n; i ++) // 3、输出
    {
    
    
        cout << books[i].ibsn << " " << books[i].name << " ";
        printf("%.2lf\n", books[i].price);
    }
    
    return 0;
}

206、基于顺序存储结构的图书信息表的修改

描述

定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据完成图书信息表的创建,然后计算所有图书的平均价格,将所有低于平均价格的图书价格提高20%,所有高于或等于平均价格的图书价格提高10%,最后逐行输出价格修改后的图书信息。

输入

输入n+1行,前n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。最后第n+1行是输入结束标志:0 0 0(空格分隔的三个0)。其中书号和书名为字符串类型,价格为浮点数类型。

输出

总计n+1行,第1行是修改前所有图书的平均价格,后n行是价格修改后n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔。其中价格输出保留两位小数。

输入样例 1
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
0 0 0
输出样例 1
43.88
9787302257646 Data-Structure 42.00
9787302164340 Operating-System 55.00
9787302219972 Software-Engineer 38.40
9787302203513 Database-Principles 43.20
9787810827430 Discrete-Mathematics 43.20
9787302257800 Data-Structure 68.20
9787811234923 Compiler-Principles 68.20
9787822234110 The-C-Programming-Language 45.60
AC 代码
#include <iostream>
#include <cstring>
#include <algorithm> // sort函数在这个库中

using namespace std;

typedef struct // 建立书结构体
{
    
    
    string ibsn;
    string name;
    double price;
}Book;

const int MaxSize = 10010;
Book books[MaxSize]; // 定义Book类型的顺序表


int main()
{
    
    
    int n = 0;
    
    double sum = 0;
    while (1) // 1、建立顺序表顺便求和
    {
    
    
        cin >> books[n].ibsn >> books[n].name >> books[n].price;
        
        if (books[n].price == 0) break; // 输入三个0时终止输入
        
        sum += books[n].price; // 价钱加和
        
        n ++; // 注意这个n ++的操作需要在break语句后面
    }
    
    // 2、求平均
    double ave = sum / n; // 这里由于右值中包含double类型,因此可以略精确除得到平均值
    printf("%.2lf\n", ave);
    
    for (int i = 0; i < n; i ++) // 3、输出
    {
    
    
        if (books[i].price < ave) books[i].price *= 1.2; // 按题目要求操作
        else books[i].price *= 1.1;
        
        cout << books[i].ibsn << " " << books[i].name << " ";
        printf("%.2lf\n", books[i].price);
    }
    
    return 0;
}

207、基于顺序存储结构的图书信息表的逆序存储

描述

定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据来完成图书信息表的创建,然后将读入的图书信息逆序存储,逐行输出逆序存储后每本图书的信息。

输入

输入n+1行,第一行是图书数目n,后n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。其中书号和书名为字符串类型,价格为浮点数类型。

输出

总计n行,第i行是原有图书表中第n-i+1行的图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔。其中价格输出保留两位小数。

输入样例 1
8
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
输出样例 1
9787822234110 The-C-Programming-Language 38.00
9787811234923 Compiler-Principles 62.00
9787302257800 Data-Structure 62.00
9787810827430 Discrete-Mathematics 36.00
9787302203513 Database-Principles 36.00
9787302219972 Software-Engineer 32.00
9787302164340 Operating-System 50.00
9787302257646 Data-Structure 35.00
AC 代码
#include <iostream>

using namespace std;

typedef struct // 建立书结构体
{
    
    
    string ibsn;
    string name;
    double price;
}Book;

const int MaxSize = 10010;
Book books[MaxSize]; // 建立书结构体类型数组

int main()
{
    
    
    int n;
    cin >> n;
    for (int i = 0; i < n; i ++) // 1、输入
        cin >> books[i].ibsn >> books[i].name >> books[i].price;
    
    for (int i = n - 1; i >= 0; i --)
    {
    
    
        cout << books[i].ibsn << " " << books[i].name << " ";
        printf("%.2lf\n", books[i].price);
    }
    
    return 0;
}

208、基于顺序存储结构的图书信息表的最贵图书的查找

描述

定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据来完成图书信息表的创建,然后查找价格最高的图书,输出相应图书的信息。

输入

总计输入n+1行,其中,第一行是图书数目n,后n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。其中书号和书名为字符串类型,价格为浮点数类型。

输出

总计输出m+1行,其中,第一行是最贵图书的数目(价格最高的图书可能有多本),后m行是最贵图书的信息,每本图书信息占一行,书号、书名、价格用空格分隔,其中价格输出保留两位小数。

输入样例 1
8
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
输出样例 1
2
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
AC 代码
// 总体思路是拍完序后直接输出第一个就好(降序排列)

#include <iostream>
#include <cstring>
#include <algorithm> // sort函数在这个库中

using namespace std;

typedef struct // 建立书结构体
{
    
    
    string ibsn;
    string name;
    double price;
}Book;

const int MaxSize = 10010;
Book books[MaxSize]; // 定义Book类型的顺序表

bool operator < (const Book &a, const Book &b) // 重载小于号
{
    
    
    return a.price > b.price; // 由于题目要求是降序价格输出
}

int main()
{
    
    
    int n;
    cin >> n;
    
    for (int i = 0; i < n; i ++) // 1、建立顺序表
        cin >> books[i].ibsn >> books[i].name >> books[i].price;
        
    sort(books, books + n); // 2、利用重载特性排序
    
    // for (int i = 0; i < n; i ++) // 3、输出
    // {
    
    
    //     cout << books[i].ibsn << " " << books[i].name << " ";
    //     printf("%.2lf\n", books[i].price);
    // }
    
    int ans = 0;
    while (books[ans].price == books[0].price)
        ans ++; // 记录价格同为最贵的书籍数量
    
    cout << ans << endl;
    for (int i = 0; i < ans; i ++)
    {
    
    
        cout << books[i].ibsn << " " << books[i].name << " ";
        printf("%.2lf\n", books[0].price);
    }
    
    return 0;
}

209、基于顺序存储结构的图书信息表的最爱图书的查找

描述

定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据来完成图书信息表的创建,然后根据指定的最爱图书的名字,查找最爱的图书,输出相应图书的信息。

输入

总计n+m+2行。首先输入n+1行,其中,第一行是图书数目n,后n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。其中书号和书名为字符串类型,价格为浮点数类型。然后输入m+1行,其中,第一行是一个整数m,代表查找m次,后m行是每次待查找的最爱图书名字。

输出

若查找成功: 总计输出m*(k+1)行,对于每一次查找,第一行是最爱图书数目(同一书名的图书可能有多本),后k行是最爱图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,其中价格输出保留两位小数。 若查找失败: 只输出以下提示:抱歉,没有你的最爱!

输入样例 1
8
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
2
Java-Programming-Language
Data-Structure
输出样例 1
Sorry,there is no your favourite!
2
9787302257646 Data-Structure 35.00
9787302257800 Data-Structure 62.00
AC 代码
// 总体思路是拍完序后直接输出第一个就好(降序排列)

#include <iostream>
#include <cstring>
#include <algorithm> // sort函数在这个库中

using namespace std;

typedef struct // 建立书结构体
{
    
    
    string ibsn;
    string name;
    double price;
}Book;

const int MaxSize = 1010;
Book books[MaxSize]; // 定义Book类型的顺序表

bool operator < (const Book &a, const Book &b) // 重载小于号
{
    
    
    return a.price > b.price; // 由于题目要求是降序价格输出
}

int main()
{
    
    
    int n;
    cin >> n;
    
    for (int i = 0; i < n; i ++) // 1、建立顺序表
        cin >> books[i].ibsn >> books[i].name >> books[i].price;
        
    int m;
    cin >> m;
    while (m --)
    {
    
    
        string name;
        cin >> name;
        
        int cnt = 0; // 喜欢书的数量
        for (int i = 0; i < n; i ++)
            if (books[i].name == name)
                cnt ++;
        
        if (cnt == 0) cout << "Sorry,there is no your favourite!" << endl;
        else 
        {
    
    
            cout << cnt << endl;
            for (int i = 0; i < n; i ++)
                if (books[i].name == name)
                {
    
    
                    cout << books[i].ibsn << " " << books[i].name << " ";
                    printf("%.2lf\n", books[i].price);
                }
        }
    }
    
    return 0;
}

210、基于顺序存储结构的图书信息表的最佳位置图书的查找

描述

定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据来完成图书信息表的创建,然后根据指定的最佳位置的序号,查找该位置上的图书,输出相应图书的信息。

输入

总计n+m+2行。首先输入n+1行,其中,第一行是图书数目n,后n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。其中书号和书名为字符串类型,价格为浮点数类型。然后输入m+1行,其中,第一行是一个整数m,代表查找m次,后m行每行内容为一个整数,代表待查找的图书的位置序号。

输出

输出m行 若查找成功: 输出内容为第i次查询的指定位置上的一本图书的信息(书号、书名、价格),书号、书名、价格用空格分隔,其中价格输出保留两位小数。 若查找失败: 只输出以下提示:抱歉,最佳位置上的图书不存在!

输入样例 1
8
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
2
2
0
输出样例 1
9787302164340 Operating-System 50.00
Sorry,the book on the best position doesn't exist!
AC 代码
#include <iostream>
#include <cstring>

using namespace std;

typedef struct // 建立书结构体
{
    
    
    string ibsn;
    string name;
    double price;
}Book;

const int MaxSize = 1010;
Book books[MaxSize]; // 定义Book类型的顺序表

int main()
{
    
    
    int n;
    cin >> n;
    
    for (int i = 1; i <= n; i ++) // 1、建立顺序表,注意,这里为了和位序相对,是从1开始
        cin >> books[i].ibsn >> books[i].name >> books[i].price;
        
    int m;
    cin >> m;
    while (m --)
    {
    
    
        int site; // 2、输入位置
        cin >> site;

        if (site < 1 || site > n) cout << "Sorry,the book on the best position doesn't exist!" << endl;
        else 
        {
    
    
            cout << books[site].ibsn << " " << books[site].name << " ";
            printf("%.2lf\n", books[site].price);            
        }
    }
    
    return 0;
}

211、基于顺序存储结构的图书信息表的新图书的入库

描述

定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据来完成图书信息表的创建,然后根据指定的待入库的新图书的位置和信息,将新图书插入到图书表中指定的位置上,最后输出新图书入库后所有图书的信息。

输入

总计n+3行。首先输入n+1行,其中,第一行是图书数目n,后n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。其中书号和书名为字符串类型,价格为浮点数类型。之后输入第n+2行,内容仅为一个整数,代表待入库的新图书的位置序号。最后输入第n+3行,内容为新图书的信息,书号、书名、价格用空格分隔。

输出

若插入成功: 输出新图书入库后所有图书的信息(书号、书名、价格),总计n+1行,每行是一本图书的信息,书号、书名、价格用空格分隔。其中价格输出保留两位小数。 若插入失败: 只输出以下提示:抱歉,入库位置非法!

输入样例 1
7
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
2
9787822234110 The-C-Programming-Language 38.00
输出样例 1
9787302257646 Data-Structure 35.00
9787822234110 The-C-Programming-Language 38.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
输入样例 2
7
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9
9787822234110 The-C-Programming-Language 38.00
输出样例 2
Sorry,the position to be inserted is invalid!
AC 代码
#include <iostream>
#include <cstring>

using namespace std;

typedef struct // 建立书结构体
{
    
    
    string ibsn;
    string name;
    double price;
}Book;

const int MaxSize = 1010;
Book books[MaxSize]; // 定义Book类型的顺序表

int main()
{
    
    
    int n;
    cin >> n;
    
    for (int i = 1; i <= n; i ++) // 1、建立顺序表,注意,这里为了和位序相对,是从1开始
        cin >> books[i].ibsn >> books[i].name >> books[i].price;
        
    int site; // 2、输入插入位置
    cin >> site;

    if (site < 1 || site > n)
    {
    
    
        cout << "Sorry,the position to be inserted is invalid!" << endl;
        return 0; // 注意这里不能再运行程序
    }
    else  
    {
    
    
        for (int i = n; i >= site; i --) // 倒序开始遍历,将顺序表后移
        {
    
    
            books[i + 1].ibsn = books[i].ibsn;
            books[i + 1].name = books[i].name;
            books[i + 1].price = books[i].price;
        }
        
        cin >> books[site].ibsn >> books[site].name >> books[site].price;
    }
    
    for (int i = 1; i <= n + 1; i ++)
    {
    
    
        cout << books[i].ibsn << " " << books[i].name << " ";
        printf("%.2lf\n", books[i].price);
    }
    
    return 0;
}

212、基于顺序存储结构的图书信息表的旧图书的出库

描述

定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据来完成图书信息表的创建,然后根据指定的待出库的旧图书的位置,将该图书从图书表中删除,最后输出该图书出库后的所有图书的信息。

输入

总计n+2行。首先输入n+1行,其中,第一行是图书数目n,后n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。其中书号和书名为字符串类型,价格为浮点数类型。之后输入第n+2行,内容仅为一个整数,代表待删除的旧图书的位置序号。

输出

若删除成功: 输出旧图书出库后所有图书的信息(书号、书名、价格),总计n-1行,每行是一本图书的信息,书号、书名、价格用空格分隔。其中价格输出保留两位小数。 若删除失败: 只输出以下提示:抱歉,出库位置非法!

输入样例 1
7
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
2
9787822234110 The-C-Programming-Language 38.00
输出样例 1
9787302257646 Data-Structure 35.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
输入样例 2
8
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
9
输出样例 2
Sorry,the position to be deleted is invalid!
AC 代码
#include <iostream>
#include <cstring>

using namespace std;

typedef struct // 建立书结构体
{
    
    
    string ibsn;
    string name;
    double price;
}Book;

const int MaxSize = 1010;
Book books[MaxSize]; // 定义Book类型的顺序表

int main()
{
    
    
    int n;
    cin >> n;
    
    for (int i = 1; i <= n; i ++) // 1、建立顺序表,注意,这里为了和位序相对,是从1开始
        cin >> books[i].ibsn >> books[i].name >> books[i].price;
        
    int site; // 2、输入插入位置
    cin >> site;

    if (site < 1 || site > n)
    {
    
    
        cout << "Sorry,the position to be deleted is invalid!" << endl;
        return 0;
    }
    else 
        for (int i = site; i <= n - 1; i ++) // 遍历进行替换
        {
    
    
            books[i].ibsn = books[i + 1].ibsn;
            books[i].name = books[i + 1].name;
            books[i].price = books[i + 1].price;
        }
    
    for (int i = 1; i <= n - 1; i ++)
    {
    
    
        cout << books[i].ibsn << " " << books[i].name << " ";
        printf("%.2lf\n", books[i].price);
    }
    
    return 0;
}

213、基于顺序存储结构的图书信息表的图书去重

描述

出版社出版的任何一本图书的书号(ISBN)都是唯一的,即图书表中不允许包含书号重复的图书。定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据来完成图书信息表的创建(书号可能重复),然后进行图书的去重,即删除书号重复的图书(只保留第一本),最后输出去重后所有图书的信息。

输入

总计输入n+1行,其中,第一行是图书数目n,后n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格(书号可能重复)。其中书号和书名为字符串类型,价格为浮点数类型。

输出

总计输出m+1行(m≤n),其中,第一行是去重后的图书数目,后m行是去重后图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,其中价格输出保留两位小数。

输入样例 1
9
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
输出样例 1
8
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
AC 代码
#include <iostream>
#include <cstring>

using namespace std;

typedef struct // 建立书结构体
{
    
    
    string ibsn;
    string name;
    double price;
}Book;

const int MaxSize = 1010;
Book books[MaxSize]; // 定义Book类型的顺序表

// 利用双指针算法进行去重
void Unique(Book books[], int &n) // 注意前一个参数传的是地址,后一个参数传的是引用,因此都属于地址传递
{
    
    
    int length = 0;
    int j = 0;
    for (int i = 0; i < n; i ++)
        if (!i || books[i].ibsn != books[i - 1].ibsn) // 如果不是第一个话并且和前一个不同的话,我们就将其加入到新的顺序表中
        {
    
    
            books[j ++] = books[i];
            length ++;
        }
    
    n = length;

}

int main()
{
    
    
    int n;
    cin >> n;
    
    for (int i = 0; i < n; i ++) // 1、建立顺序表
        cin >> books[i].ibsn >> books[i].name >> books[i].price;

    // 2、去重
    Unique(books, n); // 传入待去重顺序表和顺序表长度
    
    cout << n << endl;
    for (int i = 0; i < n; i ++)
    {
    
    
        cout << books[i].ibsn << " " << books[i].name << " ";
        printf("%.2lf\n", books[i].price);
    }
    
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_57095511/article/details/121067300