为什么么自己电脑可以过啊

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; } 为什么自己的电脑可以过,网站过不了,求指点


评论:

include

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;

}


yangdingchen  •  1年前

这能过样例也是离谱了,这最大值是怎么个求法呢?

按你的思路来讲:

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 了。


renxiuyuan  •  1年前

STLindex 就一行:

index=max_element(a[i]+1,a[i]+6)-a[i]; //<algorithm>

renxiuyuan  •  1年前