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

看板C_and_CPP (C/C++)作者 (好吃)時間12年前 (2014/04/28 11:43), 編輯推噓2(2025)
留言27則, 9人參與, 最新討論串1/1
老師出了一題二維矩陣的題目,小弟使用的方法是圖法煉鋼, 不知道有無其他方法可以解決這個題目,煩請大家幫忙,謝謝 題目說明如下: 有一浮點數的二維矩陣(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; } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.176.146.55 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1398656600.A.79A.html

04/28 12:40, , 1F
題目看不懂..
04/28 12:40, 1F

04/28 13:30, , 2F
我想你應該先學會迴圈...
04/28 13:30, 2F

04/28 14:09, , 3F
就是每一列裡面,找出介於1.00~2.00的組合
04/28 14:09, 3F

04/28 14:10, , 4F
程式只顯示出第一列所有的可能
04/28 14:10, 4F

04/28 14:40, , 5F
組合是什麼? 相加相乘還是相除 ?
04/28 14:40, 5F

04/28 14:48, , 6F
相加起來介於1.002.00或者單一個數字介於這範圍也可
04/28 14:48, 6F

04/28 14:50, , 7F
相加介於1.002.00 or 單一個數字介於這範圍也可
04/28 14:50, 7F

04/28 14:57, , 8F
你自己列的就少了很多組合了ex:(0,0)+(0,2) (0,0)+(0,3)?
04/28 14:57, 8F

04/28 15:30, , 9F
謝謝S大,所以我用這題只能用圖法煉鋼的方式嗎?
04/28 15:30, 9F

04/28 15:31, , 10F
謝謝S大,所以這題只能用圖法煉鋼的方式嗎?
04/28 15:31, 10F

04/28 15:33, , 11F
一定有比這更快的辦法 http://codepad.org/ATy58QPt
04/28 15:33, 11F

04/28 15:33, , 12F
不確定有沒有問題 沒有想很多寫的 不要叫我S大...
04/28 15:33, 12F

04/28 15:34, , 13F
我程式也沒寫多久...
04/28 15:34, 13F

04/28 15:41, , 14F
OK,我看一下
04/28 15:41, 14F

04/28 15:43, , 15F
cout << a[r][i] << endl; 這是印出的意思嗎?
04/28 15:43, 15F

04/28 20:38, , 16F
你上課到底學到什麼。
04/28 20:38, 16F

04/28 22:03, , 17F
我只知道printf
04/28 22:03, 17F

04/28 23:10, , 18F
你老師有沒有教過遞迴。
04/28 23:10, 18F

04/29 00:37, , 19F
可以教我嗎,大大別噹我
04/29 00:37, 19F

04/29 01:39, , 20F
你先 google 怎麼從一個陣列裡,產生所有可能組合,再來談
04/29 01:39, 20F

04/29 15:01, , 21F
以第一列為例 介於1到2的組合為(0,0)+(0,1)+(0,2) (0,1)
04/29 15:01, 21F

04/29 15:04, , 22F
+(0,2) (0,3)+(0,4)和(0,5)這幾種 這樣對吧?
04/29 15:04, 22F

04/29 15:05, , 23F

04/29 15:06, , 24F
打錯 是(0,2)+(0,3)和(0,4)
04/29 15:06, 24F

04/30 05:29, , 25F
........先說 不是噹你 但是這真的是CodeSOD的標準文XD
04/30 05:29, 25F

04/30 05:29, , 26F
我只能說 你可能還沒學到你需要的技術 先跳過這個吧...
04/30 05:29, 26F

04/30 05:30, , 27F
等到你C++學到後面一點 應該就知道怎麼做了
04/30 05:30, 27F
文章代碼(AID): #1JNSvOUQ (C_and_CPP)
文章代碼(AID): #1JNSvOUQ (C_and_CPP)