#include<stdio.h>
#include<math.h>
#define N 100000
int hs(int p,int q,int b[10000],int k)//判断产生的数是否是新数 ,p,q为此次遍历产生的两个数,k为数组b[]的长度
{
int i,j=0,c=0;
for(i=0;i<=k;i++)
{
if(b[i]==p)//若数组b[]中已有p
{
j++;//标记变量说明p有重复的数
break;//跳出当前循环
}
}
if(j==0)//如果没有跟p重复的数将p存入数组b[]
{
b[k+1]=p;
c++;//有新数存入
}
j=0;//将标记变量置零
if(c>0)//如果有新数存入
{
for(i=0;i<=k+c;i++)//i要循环到k+c结束
{
if(b[i]==q)
{
j++;//是否有相同
break;
}
}
if(j==0)
{
b[k+2]=q;
c++;
}
}
else//如果没有新数存入
{
for(i=0;i<=k;i++)//i循环到k结束
{
if(b[i]==q)
{
j++;//是否有相同
break;
}
}
if(j==0)
{
b[k+1]=q;
c++;
}
}
return c;
}
int main()
{
long long int i,j,p,q;
int n;
scanf("%d",&n);
int a[n];
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
int b[N],k=0,s=0;
b[0]=0;
for(i=1;i<=n;i++)
{
for(j=0;j<=k;j++)
{
p=abs(a[i]-b[j]);
q=abs(a[i]+b[j]);
s=s+hs(p,q,b,k+s);
}
k=k+s;//更新数组b[]的长度
s=0;
}
printf("%d",k);
return 0;
}
蓝桥杯 砝码称重
最新推荐文章于 2024-10-04 20:45:38 发布