void main()
{
int a[100]={0}
int i,j,k,m,n=0,z
printf("输入数字,每次回车为一个,以-1为结束数字\n")
for(i=0i<100i++)
{
scanf("%d",&a[i])
n++
if(a[i]==-1)
{
break
}
}
for(i=0i<n-1i++)
{
for(j=0j<n-2-ij++)
{
if(a[j]>a[j+1])
{
k=a[j]
a[j]=a[j+1]
a[j+1]=k
}
}
}
printf("排序后的数字是:\n")
for(i=0i<n-1i++)
printf("%d\n",a[i])
printf("请输入要插入的数字")
scanf("%d",&m)
for(i=0i<n-1i++)
{
if(a[i]<=m &&a[i+1]>m)
{
z=i
break
}
else
{
z=-2
}
}
if(z>=0)
{
for(i=n-1i>zi--)
{
a[i+1]=a[i]
}
a[z+1]=m
}
if(z==-2)
{
a[n]=m
}
for(i=0i<ni++)
{
printf("%d\n",a[i])
}
}
为啥它们范围会这样取,为啥x会从1-14,这是需要仔细推算的。因为本题的计算量很小,有时就图自己省力(少算一点)让计算机多算一点。
因为x至少是1,而y>x,z>y,为简单起见,而x、y、z的单价分别为a、b、c,所以,ax+by+cz=800
而ax+by+cz>ax+bx+cx
所以,800>(a+b+c)x
x<800/(30+20+10),即x<=13(取整数)
同样的道理,y最小是2,800=30+20y+10z>30+20y+10y,y最大=770/30=25