wab


私信TA

用户名:comes

访问量:9890

签 名:

越努力,越幸运!

等  级
排  名 794
经  验 3733
参赛次数 1
文章发表 16
年  龄 18
在职情况 学生
学  校 北京邮电大学
专  业 计算机专业

  自我简介:

来来来,做完这一题,还有下一题.

解题思路:先选出矩阵中的最大值,然后从该数为中心,找出最靠近该数的几个数中的最大值,再以该最大值为中心,重复操作,直到最后没有比中心数小的数截止。

注意事项:时间的控制

参考代码:#include<stdio.h>
#include<string.h>
int function(int *n,int k);
int main()
{
 int r,c,i,j,maxloc=-1,max,count=0,tt,ii,jj;
 scanf("%d %d",&r,&c);
 int a[r][c];
 for(i=0;i<=r-1;i++)
 {
  for(j=0;j<=c-1;j++)
  {
   scanf("%d",&a[i][j]);
   if(maxloc<a[i][j])
   {
   maxloc=a[i][j];
   ii=i;
   jj=j;
   }
  }
 }
 i=ii;
 j=jj;
 //printf("%d %d\n",i,j);
 maxloc=a[i][j];
 int k,m;
 int b[8],t[8],d[8];
 while((r>1&&j>=0)||(r>=0&&j>1))
 {
  k=0;
 // if(i>0&&j>0)
 // {
   if(i-1>=0&&j-1>=0)
   {
    b[k]=a[i-1][j-1];
    t[k]=i-1;
    d[k]=j-1;
    k++;
   }
   if(i>=1&&j>=0)
   {
    b[k]=a[i-1][j];
    t[k]=i-1;
    d[k]=j;
    k++;
   }
   if(i>=1&&j+1<=c-1)
   {
    b[k]=a[i-1][j+1];
    t[k]=i-1;
    d[k]=j+1;
    k++;
   }
   if(j>=1&&i>=0)
   {
    b[k]=a[i][j-1];
    t[k]=i;
    d[k]=j-1;
    k++;
   }
   if(j+1<=c-1&&i>=0)
   {
    b[k]=a[i][j+1];
    t[k]=i;
    d[k]=j+1;
    k++;
   }
   if(i+1<=r-1&&j-1>=0)
   {
    b[k]=a[i+1][j-1];
    t[k]=i+1;
    d[k]=j-1;
    k++;
   }
   if(i+1<=r-1&&j>=0)
   {
    b[k]=a[i+1][j];
    t[k]=i+1;
    d[k]=j;
    k++;
   }
   if(i+1<=r-1&&j+1<=c-1)
   {
    b[k]=a[i+1][j+1];
    t[k]=i+1;
    d[k]=j+1;
    k++;
   }
  //}
 /* else if(i==0&&j==0)
  {
   printf("%d",1);
  }
  else
  {*/
   maxloc=b[0];
   tt=0;
   for(m=1;m<=k-1;m++)
   {
    if(b[m]>maxloc&&b[m]<a[i][j])
    {
    maxloc=b[m];
    tt=m;
    }
   }
   memset(b,0,sizeof(int));
   ii=i;
   jj=j;
   int min=a[ii][jj];
   if(min>a[t[tt]][d[tt]])
      {
       //printf("%d ",min);
       a[i][j]=0;
    count++;
    i=t[tt];
    j=d[tt];
   }
   else
   if(min<=a[t[tt]][d[tt]])
   {
    break;
   }
 // }
 }
 if(c==1&&r==1)
 printf("%d",1);
 else
 printf("%d",count);
 return 0;
}

 

0.0分

0 人评分

  评论区

有大佬帮忙看看呗
2019-02-28 08:44:37
  • «
  • 1
  • »