2021年计算机类数据结构作业2

这篇博客包含了多个数据结构和算法的问题及解答,包括仙人球的残影问题、递归求和、有序数组插入、一元多项式求导与求和、集合合并算法以及有序线性表的有序合并。每个问题都有详细的描述、输入输出格式和AC代码示例。
摘要由CSDN通过智能技术生成

问题 A: 仙人球的残影

题目描述

在美丽的BUCT,有一名大二的同学,他的速度是众所周知的,跑100米仅仅用了2秒47,在他跑步过程中会留下残影的哎,大家很想知道他是谁了吧,他叫仙人球,既然名字这样了,于是他的思想是单一的,他总是喜欢从一点出发,经过3次转折(每次向右转90°),回到出发点,而且呢,他每次转折前总是跑相同长度的路程,所以很多人都想知道如果用‘1’算他跑步出发的第一个残影的话,那么回到起点的时候,他的残影是怎么样的呢?

输入格式

测试数据有多行,每一行为一个数N(1<=N<=10)(以0结尾,0不做处理),即仙人球在没有回到起点的时候,跑过留下N个残影后突然90°右转。

输出格式

每组测试数据输出一个结果,并且每个残影的计数位长度为3个字符长度。(当然N等于1的话,它的结果也是占用3个字符位置的)

输入样例

4
0

输出样例

  1  2  3  4
 12        5
 11        6
 10  9  8  7

AC代码

#include<bits/stdc++.h>
using namespace std;
#define rg register
#define RP(i,a,b) for(register int i=a;i<=b;i++)
#define DRP(i,a,b) for(register int i=a;i>=b;i--)
#define fre(z) freopen(z".in","r",stdin),freopen(z".out","w",stdout)
#define ll long long
#define mod 998244353
//#define lll long long
//#define lll __int128
int main()
{
   
    std::ios::sync_with_stdio(false);
    int n;
    while(cin>>n)
    {
   
        if (n == 1) 
            {
   
                cout<<"  1\n";
            }
        else if (n == 2)    
            {
   
                cout<<"  1  2\n  4  3\n";
            }
        else if (n == 3)    
            {
   
                cout<<"  1  2  3\n  8     4\n  7  6  5\n";
            }
        else if (n == 4)    
            {
   
                cout<<"  1  2  3  4\n 12        5\n 11        6\n 10  9  8  7\n";
            }
        else if (n == 5)    
            {
   
                cout<<"  1  2  3  4  5\n 16           6\n 15           7\n 14           8\n 13 12 11 10  9\n";
            }
        else if (n == 6)    
            {
   
                cout<<"  1  2  3  4  5  6\n 20              7\n 19              8\n 18              9\n 17             10\n 16 15 14 13 12 11\n";
            }
        else if (n == 7)    
            {
   
                cout<<"  1  2  3  4  5  6  7\n 24                 8\n 23                 9\n 22                10\n 21                11\n 20                12\n 19 18 17 16 15 14 13\n";
            }
        else if (n == 8)    
            {
   
                cout<<"  1  2  3  4  5  6  7  8\n 28                    9\n 27                   10\n 26                   11\n 25                   12\n 24                   13\n 23                   14\n 22 21 20 19 18 17 16 15\n";
            }
        else if (n == 9)    
            {
   
                cout<<"  1  2  3  4  5  6  7  8  9\n 32                      10\n 31                      11\n 30                      12\n 29                      13\n 28                      14\n 27                      15\n 26                      16\n 25 24 23 22 21 20 19 18 17\n";
            }
        else if (n == 10)   
            {
   
                cout<<"  1  2  3  4  5  6  7  8  9 10\n 36                         11\n 35                         12\n 34                         13\n 33                         14\n 32                         15\n 31                         16\n 30                         17\n 29                         18\n 28 27 26 25 24 23 22 21 20 19\n";
            }
        else return 0;      
    }
    return 0;
}

问题 B: 递归求和

题目描述

给出一个递归公式f(n)=n+f(n-1),其中n为小于等于10000的正整数,f(0)=0,给定n,求f(n)的值

输入格式

输入包括一个正整数n,n<=10000

输出格式

输出f(n)

输入样例

1

输出样例

1

AC代码

#include<bits/stdc++.h>
using namespace std;
#define rg register
#define RP(i,a,b) for(register int i=a;i<=b;i++)
#define DRP(i,a,b) for(register int i=a;i>=b;i--)
#define fre(z) freopen(z".in","r",stdin),freopen(z".out","w",stdout)
#define ll long long
#define mod 998244353
int kk(int n)
{
   
    if (n==0)   return 0;
    else  return n+kk(n-1);
}
//#define lll long long
//#define lll __int128
int main()
{
   
    std::ios::sync_with_stdio(false);
    int n;
    cin>>n;
    cout<<kk(n);
    return 0;
}

问题 C: 基础实验1-2.1:有序数组的插入

题目描述

给定大小为N(0<N<1000),从小到大排列的整数数组A[],以及待插入的整数X。试将整数X插入数组中的合适位置以保持数组有序性。

输入格式

第一行 数组大小 N
第二行 数组A[]
第三行 带插入的整数X

输出格式

输出:整数X在新数组中第一次出现的位置。

输入样例

5
1 2 4 4 5
4

输出样例

3

AC代码

#include<bits/stdc++.h>
using namespace std;
#define rg register
#define RP(i,a,b) for(register int i=a;i<=b;i++)
#define DRP(i,a,b) for(register int i=a;i>=b;i--)
#define fre(z) freopen(z".in","r",stdin),freopen(z".out","w",stdout)
#define ll long long
#define mod 998244353
int kk(int n)
{
   
    if (n==0)   return 0;
    else  return n+kk(n-1);
}
//#define lll long long
//#define lll __int128
int main()
{
   
    std::ios::sync_with_stdio(false);
    int n;
    cin>>n;
    int a[1100]={
   0};
    RP(i,0,n-1)
    {
   
        cin>>a[i];
    }
    int x;
    cin>>x;
    RP(i,0,n-1)
    {
   
        if (x<=a[i])
            {
   
                cout<<i+1;
                return 0;
            }
    }
    cout<<n+1;
    return 0;
}

问题 D: 数据结构作业01 – 一元多项式的求导

题目描述

一个一元多项式可以看作由若干个一元单项式按降幂排列成的线性表。请编写程序对输入的一元多项式进行求导,并输出求导的结果。

输入格式

输入为一个一元多项式,按照降幂依次输入每个单项式的系数和指数,并以-1 -1作为结束。系数和指数均为整数,指数不小于0。

输出格式

输出为求导结果多项式,按照降幂依次输出每个单项的系数和指数,每个数值后面用一个空格隔开,输出结果多项式后换行。 系数为0的单项式不得输出——除非结果多项式就是0,则直接输出0并换行。

输入样例

2 7 3 5 12 1 6 0 -1 -1

输出样例

14 6 15 4 12 0

AC代码

#include<bits/stdc++.h>
using namespace std;
#define rg register
#define RP(i,a,b) for(register int i=a;i<=b;i++)
#define DRP(i,a,b) for(register int i=a;i>=b;<
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值