算法题

本篇记录了一些个人做过算法题。

鞍点问题

自定义函数找出二维矩阵的鞍点,如果没有鞍点打印相应信息。

鞍点:该元素在矩阵所在的行中最大,所在的列中最小。

矩阵大小不超过5*5

输入:

矩阵的行数 矩阵的列数

矩阵每一行的数字

测试输入:

4 4

4 4 5 5

1 2 5 4

1 2 4 3

8 9 6 8

期待输出:

第3行第3列是鞍点,鞍点是:4

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<stdio.h>

int main() {
int hang, lie, c, max, d, i, j;
printf("输入矩阵的行数列数:\n");
scanf("%d%d", &hang, &lie);
int a[hang][lie];
printf("输入矩阵:\n");
for (i = 1; i <= hang; i++)
for (j = 1; j <= lie; j++)
scanf("%d", &a[i][j]);
d = 0;
for (i = 1; i <= hang; i++) {
c = 0;
max = 1;
for (j = 1; j <= lie; j++)
max = a[i][max] > a[i][j] ? max : j;
for (j = 1; j <= hang; j++) {
if (a[i][max] <= a[j][max])
continue;
else {
c++;
break;
}
}
if (c == 0) {
d++;
printf("第%d行,第%d列是鞍点,鞍点是:%d\n", i, max, a[i][max]);
}
}
if (d == 0)
printf("没有鞍点。");
return 0;
}

回文字符串

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
int main() {
//回文字符串
bool flag=true ;
char k;
int i;
SqStack q;
initStack(q);
string s;
cin>>s;
int t = s.size();
for(i = 0 ;i < t/2 ; i++){
push(q,s[i]);
}
if(t%2!=0){
i++;
}
for(i;i<t;i++){
pop(q,k);
if(s[i]!=k){
flag=false;
break;
}
}
cout<<flag<<endl;

return 0;
}

括号匹配

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
//括号匹配
int main() {
int i;
SqStack q;
initStack(q);
string s;
char r;
cin>>s;
int t = s.size();
for(i=0 ;i<t ; i++){
if(s[i]=='('||s[i]=='['||s[i]=='{'){
push(q,s[i]);
}else{
pop(q,r);
if(r!=s[i]){
break;
}
}
}
if(isEmpty(q)){
cout<<"匹配"<<endl;
}else{
cout<<"不匹配"<<endl;
}
return 0;
}