[問題] dev c++陣列運算的問題

作者: melogoodeat (好吃)   2014-04-28 11:43:17
老師出了一題二維矩陣的題目,小弟使用的方法是圖法煉鋼,
不知道有無其他方法可以解決這個題目,煩請大家幫忙,謝謝
題目說明如下:
有一浮點數的二維矩陣(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;
}
作者: pcyu16 (._.?)   2014-04-28 12:40:00
題目看不懂..
作者: kiedveian (極地之星光)   2014-04-28 13:30:00
我想你應該先學會迴圈...
作者: melogoodeat (好吃)   2014-04-28 14:09:00
就是每一列裡面,找出介於1.00~2.00的組合程式只顯示出第一列所有的可能
作者: CaptainH (Cannon)   2014-04-28 14:40:00
組合是什麼? 相加相乘還是相除 ?
作者: melogoodeat (好吃)   2014-04-28 14:48:00
相加起來介於1.002.00或者單一個數字介於這範圍也可相加介於1.002.00 or 單一個數字介於這範圍也可
作者: sd016808 (sd016808)   2014-04-28 14:57:00
你自己列的就少了很多組合了ex:(0,0)+(0,2) (0,0)+(0,3)?
作者: melogoodeat (好吃)   2014-04-28 15:30:00
謝謝S大,所以我用這題只能用圖法煉鋼的方式嗎?謝謝S大,所以這題只能用圖法煉鋼的方式嗎?
作者: sd016808 (sd016808)   2014-04-28 15:33:00
一定有比這更快的辦法 http://codepad.org/ATy58QPt不確定有沒有問題 沒有想很多寫的 不要叫我S大...我程式也沒寫多久...
作者: melogoodeat (好吃)   2014-04-28 15:41:00
OK,我看一下cout << a[r][i] << endl; 這是印出的意思嗎?
作者: MOONRAKER (㊣牛鶴鰻毛人)   2014-04-28 20:38:00
你上課到底學到什麼。
作者: melogoodeat (好吃)   2014-04-28 22:03:00
我只知道printf
作者: MOONRAKER (㊣牛鶴鰻毛人)   2014-04-28 23:10:00
你老師有沒有教過遞迴。
作者: melogoodeat (好吃)   2014-04-29 00:37:00
可以教我嗎,大大別噹我
作者: EdisonX (卡卡獸)   2014-04-29 01:39:00
你先 google 怎麼從一個陣列裡,產生所有可能組合,再來談
作者: Testarosa (Testarosa)   2014-04-29 15:01:00
以第一列為例 介於1到2的組合為(0,0)+(0,1)+(0,2) (0,1)+(0,2) (0,3)+(0,4)和(0,5)這幾種 這樣對吧?http://codepad.org/htDOiIdI打錯 是(0,2)+(0,3)和(0,4)
作者: Killercat (殺人貓™)   2014-04-30 05:29:00
........先說 不是噹你 但是這真的是CodeSOD的標準文XD我只能說 你可能還沒學到你需要的技術 先跳過這個吧...等到你C++學到後面一點 應該就知道怎麼做了

Links booklink

Contact Us: admin [ a t ] ucptt.com