www.gusucode.com > 基于递归算法的建筑外表面光伏电池布局优化分析与设计 > 基于递归算法的建筑外表面光伏电池布局优化分析与设计【论文+程序】/文章+源码/源程序/问题一/西面/CUMCM_Q1_西面_step2.cpp

    #include<stdio.h>
#include<math.h>
//根据step1确定各块数量
double max=11528.142101;
//记录各型号电池参数
typedef struct PVrect
{
	char* type;	//产品型号
	int x;	//产品长度
	int y;	//产品宽度
	double value;	//产品权值
}PVrect;
PVrect data[5];
int main()
{
	double sum;
	double temp;
	double min=max;
	int mini;
	int minj;
	int mink;
	int minl;
	int minm;
	data[0].type="C1";		data[0].x=1300;		data[0].y=1100;		data[0].value=608.0576;
	data[1].type="C2";		data[1].x=1321;		data[1].y=711;		data[1].value=536.6008;
	data[2].type="C10";		data[2].x=818;		data[2].y=355;		data[2].value=359.2386;
	data[3].type="C8";		data[3].x=615;		data[3].y=355;		data[3].value=318.2531;
	data[4].type="C6";		data[4].x=310;		data[4].y=355;		data[4].value=315.6212;
	int i,j,k,l,m;
	for(i=1;i<=8;i++)
	{
		for(j=1;j<=10;j++)
		{
			for(k=1;k<=20;k++)
			{
				for(l=1;l<=20;l++)
				{
					for(m=3;m<=20;m++)
					{
						sum=i*data[0].x*data[0].y*data[0].value/1000000+j*data[1].x*data[1].y*data[1].value/1000000+k*data[2].x*data[2].y*data[2].value/1000000+l*data[3].x*data[3].y*data[3].value/1000000+m*data[4].x*data[4].y*data[4].value/1000000;
						temp=sum-max;
						if(temp<0)
							temp=-temp;
						else
							continue;
						//由于屋高3200,纵向最多放两块C1或C2,因此面积有损失,这里将总面积修正
						if(temp<min&&(double(i*data[0].x*data[0].y)/1000000+double(j*data[1].x*data[1].y)/1000000+double(k*data[2].x*data[2].y)/1000000+double(l*data[3].x*data[3].y)/1000000+double(m*data[4].x*data[4].y)/1000000)<=(22.72-0.289*1.321*3-0.131*5*0.355-0.123*3.2))
						{
							min=temp;
							mini=i;
							minj=j;
							mink=k;
							minl=l;
							minm=m;
						}
					}
				}
			}
		}
	}
	printf("%s %d\n%s %d\n%s %d\n%s %d\n%s %d\n",data[0].type,mini,data[1].type,minj,data[2].type,mink,data[3].type,minl,data[3].type,minm);
	printf("%lf\n",mini*data[0].x*data[0].y*data[0].value/1000000+minj*data[1].x*data[1].y*data[1].value/1000000+mink*data[2].x*data[2].y*data[2].value/1000000+minl*data[3].x*data[3].y*data[3].value/1000000+minm*data[4].x*data[4].y*data[4].value/1000000);
	printf("%lf\n",double(mini*data[0].x*data[0].y)/1000000+double(minj*data[1].x*data[1].y)/1000000+double(mink*data[2].x*data[2].y)/1000000+double(minl*data[3].x*data[3].y)/1000000+double(minm*data[4].x*data[4].y)/1000000);
	return 0;
}