- C++
信奥【0504】五一集训
- 2024-5-4 10:09:46 @
内容一:二维数字的应用
思路
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;
}
#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;
}
#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 条评论
目前还没有评论...