蛇形输入
//多维数组之反反复复、蛇形输入
//(一种信息加密方法 已知列数 蛇形读入 按列输出正确的)
//算法思想:先读入列数,按行蛇形输入,再按照列优先输出
//奇数行:s[i/col][i%col]
//偶数行:s[i/col][col-1-i%col]
#include<bits/stdc++.h>
using namespace std;
int main(){
int col;//规定列数
char s[202],g[202][22];
int x,y;
cin>>col;
cin>>s;
int len=strlen(s);
int row;//行
if(len%col!=0){
row=len/col+1;
} else row=len/col;
//按蛇形生成二维数组
for(int i=0;i<len;i++){
if(i/5%2==0){
x=i/col;y=i%col;//偶数行
}else{
x=i/col;y=col-1-(i%col);//奇数行
}
g[x][y]=s[i];
}
//按列输出
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
cout<<g[i][j]<<" ";
}
cout<<endl;
}
for(int i=0;i<col;i++){//按列导出 col=5,row=7 5行7列 只不过输出的时候按顺着输出
for(int j=0;j<row;j++){//不加分隔符就是正确答案了
cout<<g[j][i];
}
}
return 0;
}


矩阵转置
//多维数组之转置
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2];
for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
b[j][i]=a[i][j];
}
}
for(int i=0;i<3;i++){
for(int j=0;j<2;j++){
cout<<b[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
鞍点
//多维数组计算鞍点(找每一行的最大值、每一列的最小值)
//算法思想:读入5*5的矩阵
//遍历每一行
//找到该行的最大元素值和位置
//遍历该元素所在列的元素 如果都大于等于它 那么该点就是鞍点
#include<bits/stdc++.h>
using namespace std;
int findd(int a[][5],int n){
int flag;
for(int i=0;i<n;i++){
int max=a[i][0];
int pos=0;
for(int j=0;j<n;j++){
if(a[i][j]>max){
max=a[i][j];
pos=j;
}
}
flag=1;
for(int k=0;k<n;k++){
if(a[k][pos]<max) {
flag=0;
}
}
if(flag==1){
cout<<i+1<<" "<<pos+1<<" "<<a[i][pos]<<endl;
break;
}
}
if(flag==0) cout<<"not found"<<endl;
}
int main(){
int a[5][5]={{11,3,5,6,9},{12,4,7,8,10},{10,5,6,9,11},{8,6,4,7,2},{15,10,11,20,25}};
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
findd(a,5);
return 0;
}
灰度处理
//多维数组之图像模糊处理
//四周最外侧的像素点灰度值不变
//中间各像素点的新灰度值为该像素点及其上下左右相邻四个像素点的平均值
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m,i,j;
int a[100][100];
double b[100][100];
cin>>n>>m;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
cin>>a[i][j];
}
}
for(i=0;i<n;i++){
for(j=0;j<m;j++){
if(i==0||i==n-1||j==0||j==m-1){
b[i][j]=a[i][j];
}else
{
b[i][j]=(a[i-1][j]+a[i+1][j]+a[i][j-1]+a[i][j+1]+a[i][j])/5;
}
}
}
for(i=0;i<n;i++){
for(j=0;j<m;j++){
cout<<(int)b[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
本文介绍了几种矩阵操作,包括蛇形输入、转置以及鞍点的查找。蛇形输入用于信息加密,通过按列输出实现。矩阵转置涉及行与列的互换。鞍点是指矩阵中某元素在同一行最大且在同一列最小的点。最后,讨论了图像的模糊处理,通过计算像素点与其相邻点的平均值来实现灰度处理。
5万+

被折叠的 条评论
为什么被折叠?



