0%

中国矿业大学数据结构作业2

2023 CUMT 中国矿业大学 数据结构课程 课后作业题 代码题解

本博文由我的GitHub仓库LymoneLM/LymoneTest代码自动整理生成,进入仓库可以查看最新的代码

如果代码对您有帮助,希望可以给我的仓库点个Star,或者在GitHub关注我,感谢

在我的个人博客莱蒙黎梦可以查看本博文原文和更多其他我的博文

本博文提供的代码仅供参考学习,原题已遗失,先尝试后使用,不同年度课程题目可能略有差异

A.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <bits/stdc++.h>
#pragma GCC optimize(2)
#define endl "\n"
#define ll long long
#define mm(a) memset(a, 0, sizeof(a))
using namespace std;
char str[5000];
int len;
int find(int p) {
int lp = p, rp = p + (str[p] == str[p + 1]);
for (; lp >= 0 && rp < len; lp--, rp++)
if (str[lp] != str[rp])
break;
lp++, rp--;
return (rp - lp) ? (rp - lp + 1) / 2 : 1;
}
int find2(int p){

}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);

while (cin >> str) {
len = strlen(str);
int ans = 0;
for (int i = 0; i < len; i++) {
ans += find(i);
}
cout << ans << endl;
}

return 0;
}

A2.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <string.h>
char s[5007];
int main() {
while (scanf("%s", s) != EOF) {
int len = strlen(s) - 1, ans = 0, l, r;
for (int i = 0; i <= len; ++i, ++ans) {
for (l = i - 1, r = i + 1; l >= 0 && r <= len && s[l] == s[r]; --l, ++r, ++ans);
for (l = i, r = i + 1; l >= 0 && r <= len && s[l] == s[r]; --l, ++r, ++ans);
}
printf("%d\n", ans);
}
return 0;
}

B.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <bits/stdc++.h>
#pragma GCC optimize(2)
#define endl "\n"
#define ll long long
#define mm(a) memset(a,0,sizeof(a))
using namespace std;

int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);

int T;
cin>>T;
while(T--){
int temp;
cin>>temp;
for(int i=1;i<=temp;i++)
for(int j=1;j<=temp;j++)
cout<<i*j<<" \n"[j==temp?1:0];
}

return 0;
}

C.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <bits/stdc++.h>
#pragma GCC optimize(2)
#define endl "\n"
#define ll long long
#define mm(a) memset(a,0,sizeof(a))
using namespace std;

int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);

int a[5];
while(true){
for(int i=0;i<5;i++)
cin>>a[i];
if(a[0]+a[1]+a[2]+a[3]+a[4]==0)
break;
}


return 0;
}

C2.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <algorithm>
#include <iostream>
using namespace std;
int main() {
float a[15];
while (1) {
int dc = 1, db = 1, fb = 1;
for (int i = 0; i < 5; i++)
cin >> a[i];
if (a[0] == 0 && a[4] == a[0] && a[3] == 0 && a[2] == 0 && a[1] == 0)
break;
float d;
float q;
for (int i = 1; i < 5; i++) {
if (dc == 1)
if (i == 1)
d = a[i] - a[i - 1];
else if (d != a[i] - a[i - 1])
dc = 0;
if (db == 1)
if (i == 1)
q = a[i] / a[i - 1];
else if ((q != a[i] / a[i - 1]))
db = 0;
if (fb == 1)
if (i >= 2 && i < 5)
if (a[i] != (a[i - 1] + a[i - 2]))
fb = 0;
}
int num;
if (dc == 1) {
num = a[4];
for (int i = 0; i < 5; i++) {
num = num + d;
cout << num;
if (i != 4)
cout << " ";
}
cout << endl;
} else if (db == 1) {
num = a[4];
for (int i = 0; i < 5; i++) {
num = num * q;
cout << num;
if (i != 4)
cout << " ";
}
cout << endl;
} else if (fb == 1) {
for (int i = 5; i < 10; i++) {
a[i] = a[i - 1] + a[i - 2];
cout << a[i];
if (i != 9)
cout << " ";
}
cout << endl;
}
}
return 0;
}

D.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <bits/stdc++.h>
#pragma GCC optimize(2)
#define endl "\n"
#define ll long long
#define mm(a) memset(a, 0, sizeof(a))
using namespace std;

struct Node {
char data;
Node *l, *r;
};

void postOrderTraversal(Node *p) {
if (p->l != NULL)
postOrderTraversal(p->l);
if (p->r != NULL)
postOrderTraversal(p->r);
cout << p->data;
delete p;
}

Node *creatBTreePI(char *pres, char *ins, int n) {
if (n == 0)
return NULL;
Node *p = new Node;
p->data = pres[0];
int i = 0;
while (ins[i] != pres[0])
i++;
p->l = creatBTreePI(pres + 1, ins, i);
p->r = creatBTreePI(pres + i + 1, ins + i + 1, n - i - 1);
return p;
}

int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);

char pres[30], ins[30];
while (cin >> pres >> ins) {
Node *p = creatBTreePI(pres, ins, strlen(pres));
postOrderTraversal(p);
cout<<endl;
}

return 0;
}

E.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <bits/stdc++.h>
#pragma GCC optimize(2)
#define endl "\n"
#define ll long long
#define mm(a) memset(a, 0, sizeof(a))
using namespace std;

struct Node {
char data;
Node *l, *r;
};

void postOrderTraversal(Node *p) {
if (p->l != NULL)
postOrderTraversal(p->l);
if (p->r != NULL)
postOrderTraversal(p->r);
cout << p->data;
delete p;
}

Node *creatBTreeIP(char *ins, char *posts, int n) {
if (n == 0)
return NULL;
Node *p = new Node;
p->data = posts[n - 1];
int i = 0;
while (ins[i] != posts[n - 1])
i++;
p->l = creatBTreeIP(ins, posts, i);
p->r = creatBTreeIP(ins + i + 1, posts + i, n - i - 1);
return p;
}

int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);

char ins[30], posts[30], ctrl;
cin >> ins >> posts >> ctrl;
Node *p = creatBTreeIP(ins,posts,strlen(ins));
ctrl == 'L' ? postOrderTraversal(p->l):postOrderTraversal(p->r);
cout<<endl;

return 0;
}

F-wzj.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <queue>
#include <stdio.h>
#include <string.h>
using namespace std;

struct node {
int x, y, step;
};

char map[105][105];
int vis[105][105];
int to[4][2] = {1, 0, -1, 0, 0, 1, 0, -1};
int n, m, sx, sy, ex, ey, ans;

int check(int x, int y) {
if (x < 0 || x >= n || y < 0 || y >= m)
return 1;
if (vis[x][y] || map[x][y] == '#')
return 1;
return 0;
}

void bfs() {
int i;
queue<node> Q;
node a, next;
a.x = sx;
a.y = sy;
a.step = 0;
vis[a.x][a.y] = 1;
Q.push(a);
while (!Q.empty()) {
a = Q.front();
Q.pop();
if (map[a.x][a.y] == 'E') {
ans = a.step;
return;
}
for (i = 0; i < 4; i++) {
next = a;
next.x += to[i][0];
next.y += to[i][1];
if (check(next.x, next.y))
continue;
next.step = a.step + 1;
vis[next.x][next.y] = 1;
Q.push(next);
}
}
ans = -1;
}

int main() {
int t;
scanf("%d", &t);
while (t--) {
scanf("%d%d", &n, &m);
int i, j;
for (i = 0; i < n; i++)
scanf("%s", map[i]);
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
if (map[i][j] == 'S') {
sx = i;
sy = j;
}
}
}
memset(vis, 0, sizeof(vis));
bfs();
printf("%d\n", ans);
}

return 0;
}

F.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <bits/stdc++.h>
#pragma GCC optimize(2)
#define endl "\n"
#define ll long long
#define mm(a) memset(a, 0, sizeof(a))
using namespace std;

char nmap[110][110];
bool flag[110][110];
int minStep[110][110];
const int cstep[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};

void find(int step, int x, int y) {
if (minStep[x][y] != 0 && step >= minStep[x][y])
return;
minStep[x][y] = step;
if (nmap[x][y] == 'E')
return;
flag[x][y] = true;
for (int i = 0; i < 4; i++) {
if (!flag[x + cstep[i][0]][y + cstep[i][1]] && (nmap[x + cstep[i][0]][y + cstep[i][1]] == '-'||nmap[x + cstep[i][0]][y + cstep[i][1]] == 'E'))
find(step + 1, x + cstep[i][0], y + cstep[i][1]);
}
flag[x][y] = false;
}

int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);

int T, N, M;
int Sx, Sy, Ex, Ey;
cin >> T;
while (T--) {
cin >> N >> M;
for (int x = 1; x <= N; x++) {
for (int y = 1; y <= M; y++) {
cin >> nmap[x][y];
if (nmap[x][y] == 'S')
Sx = x, Sy = y;
if (nmap[x][y] == 'E')
Ex = x, Ey = y;
}
}
mm(flag);
mm(minStep);
flag[Sx][Sy] = true;
find(0, Sx, Sy);
cout << (minStep[Ex][Ey] ? minStep[Ex][Ey] : -1) << endl;
}

return 0;
}

编程作业、大作业、课程设计程序代码调试、协助/指导,制作软件/脚本/网页,经验丰富质量高

支持C/C++、JAVA、Python、Matlab、JavaScript、R语言等,欢迎咨询

企鹅:3451216814

-------------本文结束感谢您的阅读-------------

欢迎关注我的其它发布渠道