【每日1题】修剪灌木的一些解题思路
很简单的一个找规律题目:
先自己手画打个表,找找一般数值的规律:
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]);
}
}