求高手查看有何问题?关于花生问题
#include<stdio.h>#include<stdlib.h>
#include<math.h>
#define MAX_NUM 55
int aField[MAX_NUM][MAX_NUM];
main()
{
int M,N,K;
scanf("%d%d%d",&M,&N,&K);
//花生地的左下角对应的数组元素是aField[1][1],路的坐标是0
for(int m=1;m<=M;m++)
for(int n=0;n<=N;n++)
scanf("%d",&aField[m][n]);
int nTotalPeanuts=0; //摘到的花生总数
int nTotalTime=0; //已经花去的时间
int nCuri=0,nCurj; //当前位置坐标
//nCuri代表纵坐标,开始是在路上,所以初值为0
while(nTotalTime<K){ //如果还有时间
int nMax=0,nMaxi,nMaxj;//最大的花生数目,及其所处的位置
//下面这个循环寻找下一个最大花生数目及其位置
for(int i=1;i<=M;i++){
for(int j=1;j<=N;j++){
if(nMax<aField[i][j]){
nMax=aField[i][j];
nMaxi=i;
nMaxj=j;
}
}
}
if(nMax==0) //地里已经没有花生了
break;
if(nCuri==0)
nCuri=nMaxj; /*如果当前位置是在路上,那么应该走到横坐标nMaxj处,再进入花生地*/
/*下一行看剩余时间是否足够走到(nMaxi,nMaxj)处,摘取花生,并回到路上*/
if(nTotalTime+nMaxi+1+abs(nMaxi-nCuri)+abs(nMaxj-nCurj)<=K){
//下一行走到新位置,以及摘花生的时间
nTotalTime+=1+abs(nMaxi-nCuri)+abs(nMaxj-nCurj);
nCuri=nMaxi;nCurj=nMaxj;//走到新位置
nTotalPeanuts+=aField[nMaxi][nMaxj];
aField[nMaxi][nMaxj]=0;//摘走花生
}
else
break;
}
printf("%d\n",nTotalPeanuts);
}