C语言 穷举法

Python014

C语言 穷举法,第1张

#include <stdio.h>

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