内容一:二维数字的应用

image

思路
1、枚举所有可能鞍点
2、判断每行的最大值是不是那一列的最小值
3、如果是鞍点,则输出,且旗帜倒掉。
4、旗帜没倒则没找到鞍点。
// 实例代码
#include<bits/stdc++.h>
using namespace std;
int a[10][10],max_num,max_x,flag=1,flagx=1;

int main(){
	for(int i=1;i<=5;i++)
		for(int j=1;j<=5;j++)cin>>a[i][j];
	for(int i=1;i<=5;i++){
		int flag=1;
		for(int j=1;j<=5;j++){
			if(j==1){
				max_num=a[i][j];
				max_x = j;
			}else if(a[i][j]>max_num){
				max_num=a[i][j];
				max_x = j;
			}
		}
		for(int j=1;j<=5;j++){
			if(a[j][max_x]<max_num){
				flag = 0;
				break;
			}
		}
		if(flag==1){
			cout<<i<<" "<<max_x<<" "<<max_num;
			flagx = 0;
		}
	}
	if(flagx==1){
		cout<<"Not found";
	}
	return 0;
}

image

#include<bits/stdc++.h>
using namespace std;
int a[110][110],b[110][110],n,m,cnt=0;
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>b[i][j];
			if(a[i][j]==b[i][j]){
				cnt++;
			}
		}
	}
	printf("%.2f",1.0*cnt/(n*m));
	return 0;
}

image image

#include<bits/stdc++.h>
using namespace std;
int a[110][110],n,h_min[110],l_min[110];

int main(){
	cin>>n;
	// 输入矩阵,
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>a[i][j];
		}
	}
	while(n!=1){
		cout<<a[2][2];
		// 求出每行的最小值
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				if(j==1){
					h_min[i]=a[i][j];
				}else if(a[i][j]<h_min[i]){
					h_min[i]=a[i][j];
				}
			}
		}
		// 行行归零
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				a[i][j]-=h_min[i];
			}
		}
		// 求列的最小值
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				if(j==1){
					l_min[i]=a[j][i];
				}else if(a[j][i]<l_min[i]){
					l_min[i]=a[j][i];
				}
			}
		}
		// 行列归零
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				a[j][i]-=l_min[i];
			}
		}
		
		// 消除第二行第二列
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				if(i<2&&j>=2) a[i][j]=a[i][j+1];
				if(i>1&&j<2) a[i][j]=a[i+1][j];
				if(i>=2&&j>=2)a[i][j]=a[i+1][j+1];
			}
		}
		n--;
	}
	return 0;
}

0 条评论

目前还没有评论...