蛇形输入
//多维数组之反反复复、蛇形输入
//(一种信息加密方法 已知列数 蛇形读入 按列输出正确的)
//算法思想:先读入列数,按行蛇形输入,再按照列优先输出
//奇数行: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;
}