2021年计算机类数据结构作业2
问题 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;<