题目大意:
给你一个数组 a ,让你求出数组 b 。b[ i ] 表示 a 数组中下标不能被 i 整除的数里面的最大值。
分析:
可能是一个比较投机取巧的方法吧,首先取出 a 数组里的最大值 a[ j ] ,那么 b 数组里,除了下标为 j 的因子的数以外,其他数的值都是 a[ j ] ,然后因为 j 的因子个数不多,我一个一个确认应该也不慢。
代码:
#include<bits/stdc++.h>
#define maxn 100050
using namespace std;
int test=0;
int n,a[maxn],b[maxn];
int main()
{
scanf("%d",&test);
while(test--)
{
int maxv=0,max_num=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(maxv<a[i])
{
maxv=a[i];
max_num=i;
}
}
for(int i=2;i<=n;i++)
{
if(max_num%i==0)
{
int max_t=0;
for(int j=1;j<=n;j++)
{
if(j%i==0)continue;
if(max_t<a[j])
{
max_t=a[j];
}
}
b[i]=max_t;
}
else
{
b[i]=maxv;
}
}
printf("%d",b[2]);
for(int i=3;i<=n;i++)
{
printf(" %d",b[i]);
}
printf("\n");
}
}