[问题] 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