Board这题我一开始用的思路是找出待求元素所在行和列的最小值再相加,这种思路只能通过了14%的数据。后来越想越复杂,然后就写不出了😂,直到今天我再来看此题时猛然发现这是一个思维题。我看了题解区发现题解区的思路是对的,但是代码存在问题,他们的代码过不了当-1的位置是(0,n-1)的这种情况,至于为什么能ac,可能是因为测试数据有点水。
我的思路全在图里
按照这种思路便可推出其他的情况
接下来是菜鸡的ac代码,有问题还请直接指出。
#include<stdio.h> int n,a[1005][1005] = {0},x,y; int main(){ scanf("%d",&n); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ scanf("%d",&a[i][j]); if(a[i][j] == -1) { x = i; y = j; } } } if(x == n-1) { if(y == 0) printf("%d",a[x-1][y] + a[x][y+1] - a[x-1][y+1]); else printf("%d",a[x-1][y] + a[x][y-1] - a[x-1][y-1]); } else if(y == n-1){ if(x == 0) printf("%d",a[x+1][y] + a[x][y-1] - a[x+1][y-1]); else printf("%d",a[x-1][y] + a[x][y-1] - a[x-1][y-1]); } else printf("%d",a[x+1][y] + a[x][y+1] - a[x+1][y+1]); return 0; /* 3 1 0 -1 2 1 2 3 2 3 题解区的代码过不了这组代码(手动滑稽) */ }