每一次数学模型培训都要熬夜我也醉了,这是同伴写的算法代码,看的我这个小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++ ;
时间: 2024-10-08 22:58:15