yangdingchen • 1年前
#include<iostream>
int a[10][10];
bool b[10][10],c=0;
using namespace std;
int main()
{
for(int i=1;i<=5;i++)
{
int maxn=-999999;
b[i][1]=1;
for(int j=1;j<=5;j++)
{
cin>>a[i][j];
if(a[i][j]>=maxn)
{
maxn=a[i][j];
for(int k=j;k<=5;k++)
{
b[i][k]=0;
}
b[i][j]=1;
}
}
}
for(int i=1;i<=5;i++)
{
for(int j=1;j<=5;j++)
{
if(b[i][j])
{
for(int k=1;k<=5;k++)
{
if(a[i][j]>a[k][j])
{
b[i][j]=0;
break;
}
}
if(b[i][j])
{
cout<<i<<" "<<j<<" "<<a[i][j]<<endl;
c=1;
}
}
}
}
if(c==false)
{
cout<<"not found";
}
return 0;
}
为什么自己的电脑可以过,网站过不了,求指点
评论:
int a[10][10]; bool b[10][10],c=0; using namespace std; int main() {
for(int i=1;i<=5;i++)
{
int maxn=-999999;
b[i][1]=1;
for(int j=1;j<=5;j++)
{
cin>>a[i][j];
if(a[i][j]>=maxn)
{
maxn=a[i][j];
for(int k=j;k<=5;k++)
{
b[i][k]=0;
}
b[i][j]=1;
}
}
}
for(int i=1;i<=5;i++)
{
for(int j=1;j<=5;j++)
{
if(b[i][j])
{
for(int k=1;k<=5;k++)
{
if(a[i][j]>a[k][j])
{
b[i][j]=0;
break;
}
}
if(b[i][j])
{
cout<<i<<" "<<j<<" "<<a[i][j]<<endl;
c=1;
}
}
}
}
if(c==false)
{
cout<<"not found";
}
return 0;
}
这能过样例也是离谱了,这最大值是怎么个求法呢?
按你的思路来讲:
for(int k=j;k<=5;k++)//循环是不是应从1到j-1?
{
b[i][k]=0;
}
b[i][j]=1;
否则如果有一行输入将 a_i 设置为{0,1,2,3,4,5}(下标从 0 开始)
那 b_i 就会被设置为 {0,1,1,1,1,1}(下标从 0 开始)
再说也不用循环来循环去地设置。
第一个大循环可改为:
for(int i=1;i<=5;i++) {
for(int j=1;j<=5;j++) {
cin>>a[i][j]; //直接输入完一行
}
int maxn=a[i][1],index=1;//初始化
for(int j=2;j<=5;j++){//循环寻找最大值
if(a[i][j]>maxn){
maxn=a[i][j];
index=j;//记录最大值下标
}
}
b[i][index]=1;//设置最大值标志位
}
这样能减少一层循环,而且设置更简单
改了就 AC
了。