【每日1题】修剪灌木的一些解题思路

alt

很简单的一个找规律题目:

先自己手画打个表,找找一般数值的规律:

alt

1.可以发现先让他从左到右,再从右到左循环一次,然后每一株灌木的高度变化就会一直循环了。
2.在这些循环里刚好每一株的灌木高度最大值都包含在内

(运气真好)

3.第一个灌木高度起始值为2*n-2

规律找好了直接走代码

using namespace std;
int a, b,n,i,t=1,g=1;
int c[10005],d[10005],e[10005];
int main()
{
  cin>>n;
  if(n==1)//1是特殊值,不然输出0了
  {
    cout<<1;
    return 0;
  }
  c[1]=2*n-2;
  for(i=1;i<=n;i++)
  {
    c[i+1]=i;
  }
  i=1;
  while(i!=n+1)
  {
    for(t=1;t<=n;t++)
    {
      if(t!=i)
      {
        c[t]++;
      }
      else
      {
        d[t]=c[t];
        c[t]=1;
      }
    }
    i++;
  }
  c[n]=2*n-2;
  for(i=n-1;i>=1;i--)
  {
    c[i]=g;
    g++;
  }
  i=n;
  //cout<<c[1]<<endl;
  while(i!=0)
  {
    for(t=n;t>=1;t--)
    {
      if(t!=i)
      {
        c[t]++;
      }
      else
      {
        e[t]=c[t];
        c[t]=1;
      }
    }
    i--;
  }
  for(i=1;i<=n;i++)
  {
    if(i!=n)
    cout<<max(d[i],e[i])<<endl;
    if(i==n)
    cout<<max(d[i],e[i]);
  }
}

全部评论

相关推荐

尊嘟假嘟点击就送:加v细说,问题很大
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务