老师出了一题二维矩阵的题目,小弟使用的方法是图法炼钢,
不知道有无其他方法可以解决这个题目,烦请大家帮忙,谢谢
题目说明如下:
有一浮点数的二维矩阵(3乘6),把每一列所有可能产生
1.00~2.00的值列出来。
小弟的idea是把所有可能列出来,如下并附上程式码
先列出第一列所有可能产生介于1.00~2.00的组合
第二列第三列以此类推
(0,0)介于1.00~2.00
(0,0)+(0,1) 介于1.00~2.00
(0,0)+(0,1)+(0,2) 介于1.00~2.00
(0,0)+(0,1)+(0,2)+ (0,3) 介于1.00~2.00
(0,0)+(0,1)+(0,2)+ (0,3)+(0,4) 介于1.00~2.00
(0,0)+(0,1)+(0,2)+ (0,3)+(0,4)+(0,5) 介于1.00~2.00
(0,1)介于1.00~2.00
(0,1)+(0,2) 介于1.00~2.00
(0,1)+(0,2)+(0,3) 介于1.00~2.00
(0,1)+(0,2)+(0,3)+ (0,4) 介于1.00~2.00
(0,1)+(0,2)+(0,3)+ (0,4)+(0,5) 介于1.00~2.00
(0,2)介于1.00~2.00
(0,2)+(0,3) 介于1.00~2.00
(0,2)+(0,3)+(0,4) 介于1.00~2.00
(0,2)+(0,3)+(0,4)+ (0,5) 介于1.00~2.00
(0,3)介于1.00~2.00
(0,3)+(0,4) 介于1.00~2.00
(0,3)+(0,4)+(0,5) 介于1.00~2.00
(0,4)介于1.00~2.00
(0,4)+(0,5) 介于1.00~2.00
(0,5) 介于1.00~2.00
程式码:
#include<stdio.h>
#include<stdlib.h>
#define row 3
#define col 6
int main(void)
{
int i=0,j=0;
float a[row][col]={{0.25,0.50,0.80,1.00,1.125,0.875},
{0.3333,0.1667,0.4167,0.70,0.7833,0.6667},
{0.375,0.4375,0.1875,0.125,0.25,0.3125}};
/*第一列所有可能*/
/*以(0,0)为基准*/
printf("第一列选到的结果为:\n");
for(i=0;i<1;i++)
{
for(j=0;j<1;j++)
{
if((a[i][j]>=1.00)&&(a[i][j]<2.00))
printf("第%d个\n",j);
else if((a[i][j]+a[i][j+1]>=1.00)&&(a[i][j]+a[i][j+1]<2.00))
printf("第%d,%d个\n",j,j+1);
else
if((a[i][j]+a[i][j+1]+a[i][j+2]>=1.00)&&(a[i][j]+a[i][j+1]+a[i][j+2]<2.00))
printf("第%d,%d,%d个\n",j,j+1,j+2);
else
if((a[i][j]+a[i][j+1]+a[i][j+2]+a[i][j+3]>=1.00)&&(a[i][j]+a[i][j+1]+a[i][j+2]+a[i][j+3]<2.00))
printf("第%d,%d,%d,%d个\n",j,j+1,j+2,j+3);
else
if((a[i][j]+a[i][j+1]+a[i][j+2]+a[i][j+3]+a[i][j+4]>=1.00)&&(a[i][j]+a[i][j+1]+a[i][j+2]+a[i][j+3]+a[i][j+4]<2.00))
printf("第%d,%d,%d,%d,%d个\n",j,j+1,j+2,j+3,j+4);
else
if((a[i][j]+a[i][j+1]+a[i][j+2]+a[i][j+3]+a[i][j+4]+a[i][j+5]>=1.00)&&(a[i][j]+a[i][j+1]+a[i][j+2]+a[i][j+3]+a[i][j+4]+a[i][j+5]<2.00))
printf("第%d,%d,%d,%d,%d,%d个
\n",j,j+1,j+2,j+3,j+4,j+5);
}
}
/*以(0,1)为基准*/
for(i=0;i<1;i++)
{
for(j=1;j<2;j++)
{
if((a[i][j]>=1.00)&&(a[i][j]<2.00))
printf("第%d个\n",j);
else if((a[i][j]+a[i][j+1]>=1.00)&&(a[i][j]+a[i][j+1]<2.00))
printf("第%d,%d个\n",j,j+1);
else
if((a[i][j]+a[i][j+1]+a[i][j+2]>=1.00)&&(a[i][j]+a[i][j+1]+a[i][j+2]<2.00))
printf("第%d,%d,%d个\n",j,j+1,j+2);
else
if((a[i][j]+a[i][j+1]+a[i][j+2]+a[i][j+3]>=1.00)&&(a[i][j]+a[i][j+1]+a[i][j+2]+a[i][j+3]<2.00))
printf("第%d,%d,%d,%d个\n",j,j+1,j+2,j+3);
else
if((a[i][j]+a[i][j+1]+a[i][j+2]+a[i][j+3]+a[i][j+4]>=1.00)&&(a[i][j]+a[i][j+1]+a[i][j+2]+a[i][j+3]+a[i][j+4]<2.00))
printf("第%d,%d,%d,%d,%d个\n",j,j+1,j+2,j+3,j+4);
}
}
/*以(0,2)为基准*/
for(i=0;i<1;i++)
{
for(j=2;j<3;j++)
{
if((a[i][j]>=1.00)&&(a[i][j]<2.00))
printf("第%d个\n",j);
else if((a[i][j]+a[i][j+1]>=1.00)&&(a[i][j]+a[i][j+1]<2.00))
printf("第%d,%d个\n",j,j+1);
else
if((a[i][j]+a[i][j+1]+a[i][j+2]>=1.00)&&(a[i][j]+a[i][j+1]+a[i][j+2]<2.00))
printf("第%d,%d,%d个\n",j,j+1,j+2);
else
if((a[i][j]+a[i][j+1]+a[i][j+2]+a[i][j+3]>=1.00)&&(a[i][j]+a[i][j+1]+a[i][j+2]+a[i][j+3]<2.00))
printf("第%d,%d,%d,%d,%d个\n",j,j+1,j+2,j+3,j+4);
}
}
/*以(0,3)为基准*/
for(i=0;i<1;i++)
{
for(j=3;j<4;j++)
{
if((a[i][j]>=1.00)&&(a[i][j]<2.00))
printf("第%d个\n",j);
else if((a[i][j]+a[i][j+1]>=1.00)&&(a[i][j]+a[i][j+1]<2.00))
printf("第%d,%d个\n",j,j+1);
else
if((a[i][j]+a[i][j+1]+a[i][j+2]>=1.00)&&(a[i][j]+a[i][j+1]+a[i][j+2]<2.00))
printf("第%d,%d,%d个\n",j,j+1,j+2);
}
}
/*以(0,4)为基准*/
for(i=0;i<1;i++)
{
for(j=4;j<5;j++)
{
if((a[i][j]>=1.00)&&(a[i][j]<2.00))
printf("第%d个\n",j);
else if((a[i][j]+a[i][j+1]>=1.00)&&(a[i][j]+a[i][j+1]<2.00))
printf("第%d,%d个\n",j,j+1);
}
}
/*以(0,5)为基准*/
for(i=0;i<1;i++)
{
for(j=5;j<6;j++)
{
if((a[i][j]>=1.00)&&(a[i][j]<2.00))
printf("第%d个\n",j);
}
}
/*第二列所有可能*/
/*待续......*/
/*第三列所有可能*/
/*待续......*/
system("pause");
return 0;
}