每一次数学模型培训都要熬夜我也醉了,这是同伴写的算法代码,看的我这个小C++学徒也醉了!
#include<stdio.h>
int round1( float x)
{
return ((int)(x+0.5));
}
void main()
{
int c[13]={6,7,8,9,10,11,12,13,14,15,16,17,18};
int i,j,y1,y2,p;
float y,s=225,a;
int e[13];
float d[13];
int count1[13]={0,0,0,0,0,0,0,0,0,0,0,0,0}; int count2=0;int count[13]={0,0,0,0,0,0,0,0,0,0,0,0,0}; int count3=0;
int sm[14][20]; int se=0;
int m=0,n,k=0,kk=0;int n2=0;
int am[400]={0,0};
int bm[13]={1,2,3,4,5,6,7,8,9,10,11,12,13};
printf("输入区间最小营地数=");
scanf(" %d",&y1);
printf("输入区间最大营地数=");
scanf(" %d",&y2);
printf("D的不同重复项输入值=");
scanf(" %d",&p);
for(y=y1;y<=y2;)//输入不同的y。可以算出距离项e[j]
{
a=s/(y+1);
for ( i=0;i<13;i++)//对每个不同的e[j]取整
{
d[i]=(y+1)/(c[i]+1);
e[i]=round1(d[i]);
for (j=1;j<19;j++)//用另一个矩阵进行保存
{
{if(j<=c[i])
sm[i][j-1]=e[i]*j;
else sm[i][j-1]=0;}
}
}
for(i=0;i<13;i++)
{
for (j=0;j<13;j++)
{
if(e[j]!=e[j+1])
count1[i]=count1[i]+1;//对不同的距离项记数
}
for (n2=0;n2<13;n2++) //增加一列相同项
sm[n2][19]=sm[n2][0];
for (n2=0;n2<13;n2++)//可能出错的地方
{
if (sm[n2][19]==sm[n2+1][19])
for(j=0;j<18;j++)
sm[n2+1][j]=0;
}
/* for (n2=0;n2<13;n2++) //输出修正后的矩阵
{ printf("%d,",n2+1);
for(j=0;j<18;j++)
printf("%d ",sm[n2][j]);
putchar('\n');
}*/
}
for(i=0;i<13;i++)
{
if(count1[i]==p)//12个不同的距离项
{ k=0;kk=0;count3=0;
for (i=0;i<12;i++)
{
for(j=0;j<18;j++)
{ if(sm[i][j]==0)break;
else
for( n=i+1;n<13;n++)
for ( m=j;m<18;m++)
if(sm[i][j]==sm[n][m])//sm[i][j]和下一行的全部进行比较,计算相同数字的组数
{am[k]=i+1;am[k-1]=n+1;k=k+2;/*printf("%d,%d ",i+1,n+1);*/ }//输出不同行数
}
}
kk=k-2;
for(k=0;k<=kk;k++)
{
if(am[k]==1)
count[0]=1+count[0];
if(am[k]==2)
count[1]=1+count[1];
if(am[k]==3)
count[2]=1+count[2];
if(am[k]==4)
count[3]=1+count[3];
if(am[k]==5)
count[4]=1+count[4];
if(am[k]==6)
count[5]=1+count[5];
if(am[k]==7)
count[6]=1+count[6];
if(am[k]==8)
count[7]=1+count[7];
if(am[k]==9)
count[8]=1+count[8];
if(am[k]==10)
count[9]=1+count[9];
if(am[k]==11)
count[10]=1+count[10];
if(am[k]==12)
count[11]=1+count[11];
if(am[k]==13)
count[12]=1+count[12];
}
printf("营地数=%.0f\n",y);
for(n=0;n<13;n++)
if (count[n]==0)//分别输出没有出现过相同项的队数的编码
if (sm[n][0]!=0)
{
printf("没有出现重复项的编号=%d,",n+1);
count3=count3+1;
}
printf("没有出现重复项编号的总数=%d ",count3);
putchar('\n');
for(i=0;i<13;i++)//对记数项清零
count[i]=0;
}
}
for(i=0;i<13;i++)//对记数项清零
count1[i]=0;
y++ ;
}
}
代码二:比较位置矩阵最大最小的位置项
#include<stdio.h>
int round1( float x)
{
return ((int)(x+0.5));
}
void main1()
{
int c[13]={6,7,8,9,10,11,12,13,14,15,16,17,18};
int i,j; int i1=0,i2=0,i3=0;int max=0,min=0;
int sm[13][18];int d[13],e[13];int n2;
float y,s=225,a;
for(y=18;y<=23;y++)//输入不同的y。可以算出距离项e[j]
{
a=s/(y+1);
for ( i=0;i<13;i++)//对每个不同的e[j]取整
{
d[i]=(y+1)/(c[i]+1);
e[i]=round1(d[i]);
for (j=1;j<19;j++)//用另一个矩阵进行保存
if(j<=c[i])
sm[i][j-1]=e[i]*j;
else sm[i][j-1]=0;
}
for (n2=0;n2<13;n2++) //增加一列相同项
sm[n2][18]=sm[n2][0];
for (n2=0;n2<12;n2++)
{if (sm[n2][18]==sm[n2+1][18])
for(j=0;j<18;j++)
sm[n2+1][j]=0;}
for (n2=0;n2<13;n2++) //输出修正后的矩阵
{ printf("%d,",n2+1);
for(j=0;j<18;j++)
printf("%d ",sm[n2][j]);
putchar('\n');
}
putchar('\n');
max=sm[0][0];
for (i1=0;i1<13;i1++)
for(i2=0;i2<18;i2++)
if(sm[i1][i2]>max)max=sm[i1][i2];
min=sm[0][0];
for (i1=0;i1<13;i1++)
for(i2=0;i2<18;i2++)
if(sm[i1][i2]!=0) if(sm[i1][i2]<min)min=sm[i1][i2];
printf("\n%d,%d\n",max,min);
putchar('\n');
}
}
代码三:营地间冲突统计输出未(修正)
#include<stdio.h>
int round1( float x)
{
return ((int)(x+0.5));
}
void main()
{
int c[13]={6,7,8,9,10,11,12,13,14,15,16,17,18};
int i,j,y1,y2,p;
float y,s=225,a;
int e[13];
float d[13];
int count1[13]={0,0,0,0,0,0,0,0,0,0,0,0,0}; int count2=0;int count[13]={0,0,0,0,0,0,0,0,0,0,0,0,0}; int count3=0;
int sm[13][18]; int se=0;
int m=0,n,k=0,kk=0;int n2=0;
int am[400]={0,0};
int bm[13]={1,2,3,4,5,6,7,8,9,10,11,12,13};
printf("输入区间最小营地数=");
scanf(" %d",&y1);
printf("输入区间最大营地数=");
scanf(" %d",&y2);
printf("D的不同重复项输入值=");
scanf(" %d",&p);
for(y=y1;y<=y2;)//输入不同的y。可以算出距离项e[j]
{
a=s/(y+1);
for ( i=0;i<13;i++)//对每个不同的e[j]取整
{
d[i]=(y+1)/(c[i]+1);
e[i]=round1(d[i]);
for (j=1;j<19;j++)//用另一个矩阵进行保存
{
{if(j<=c[i])
sm[i][j-1]=e[i]*j;
else sm[i][j-1]=0;}
}
}
for(i=0;i<13;i++)
{
for (j=0;j<13;j++)
{
if(e[j]!=e[j+1])
count1[i]=count1[i]+1;//对不同的距离项记数
}
putchar('\n');
for (i=0;i<13;i++)
if(sm[i][0]==sm[i+1][0])
{for(j=0;j<18;j++) sm[i+1][j]=0;i++;}//把相同的距离的队数清零
putchar('\n');
for (n2=0;n2<13;n2++) //增加一列相同项
sm[n2][18]=sm[n2][0];
for (n2=0;n2<12;n2++)
{if (sm[n2][18]==sm[n2+1][18])
for(j=0;j<18;j++)
sm[n2+1][j]=0;}
}
for(i=0;i<13;i++)
{
if(count1[i]==p)//12个不同的距离项
{ k=0;kk=0;count3=0;
for (i=0;i<12;i++)
{
for(j=0;j<18;j++)
{ if(sm[i][j]==0)break;
else
for( n=i+1;n<13;n++)
for ( m=j;m<18;m++)
if(sm[i][j]==sm[n][m])//sm[i][j]和下一行的全部进行比较,计算相同数字的组数
{am[k]=i+1;am[k-1]=n+1;k=k+2;/*printf("%d,%d ",i+1,n+1);*/ }
}
}
kk=k-2;
for(k=0;k<=kk;k++)
{
if(am[k]==1)
count[0]=1+count[0];
if(am[k]==2)
count[1]=1+count[1];
if(am[k]==3)
count[2]=1+count[2];
if(am[k]==4)
count[3]=1+count[3];
if(am[k]==5)
count[4]=1+count[4];
if(am[k]==6)
count[5]=1+count[5];
if(am[k]==7)
count[6]=1+count[6];
if(am[k]==8)
count[7]=1+count[7];
if(am[k]==9)
count[8]=1+count[8];
if(am[k]==10)
count[9]=1+count[9];
if(am[k]==11)
count[10]=1+count[10];
if(am[k]==12)
count[11]=1+count[11];
if(am[k]==13)
count[12]=1+count[12];
}
printf("营地数=%.0f\n",y);
for(n=0;n<13;n++)
if (count[n]==0)//分别输出没有出现过相同项的队数的编码
if (sm[n][0]!=0) { printf("没有出现重复项的编号=%d,",n+1);count3=count3+1;}
printf("没有出现重复项编号的总数=%d ",count3);
putchar('\n');
for(i=0;i<13;i++)//对记数项清零
count[i]=0;
}
}
for(i=0;i<13;i++)//对记数项清零
count1[i]=0;
y++ ;