老師出了一題二維矩陣的題目,小弟使用的方法是圖法煉鋼,
不知道有無其他方法可以解決這個題目,煩請大家幫忙,謝謝
題目說明如下:
有一浮點數的二維矩陣(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;
}