本篇记录了一些个人做过算法题。
鞍点问题
自定义函数找出二维矩阵的鞍点,如果没有鞍点打印相应信息。
鞍点:该元素在矩阵所在的行中最大,所在的列中最小。
矩阵大小不超过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; }
|