CC好难
今天,突然发现自己好水,努力奋斗好了几个小时(超过5个)的题目,别人原来轻易就能完成。自己好白痴啊!原来自己的编程,还是十分有待成熟和改进,我的致命伤就是只会用现在正在学的而忘却了以前好用的,熟悉的。
麻烦到我的题目是这个:
5-14.从键盘输入9个不同的整数,存入一个3行3列的二维数组中,找出每一列中的最大元素,并输出起行、列下标。
同学的解决方法是:
main()
{
int a[3][3];
int b[3]={0,0,0};
int i,j;
clrscr();
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
printf("\n");
}
printf("row\t line\n");
for(j=0;j<3;j++)
{
for(i=1;i<3;i++)
{
if(a[i-1][j]<a[i][j])
b[j]=i;
}
printf("%d\t %d\t %d\n",b[j],j,a[b[j]][j]);
}
getch();
}
他用了2个数组就完成了所有的操作,最令我吃惊的是居然用一个for(j=0;j<3;j++) { for(i=1;i<3;i++) { if(a[i-1][j]<a[i][j]) b[j]=i; }把我一直以来烦恼的东西全都搞定了,用一个简洁的方法把我即使用麻烦都极点都解决不了的问题全部一扫而空,我的天啊!
我的做法是:
main()
{
int a[3][3];
int b[3][3];
int c[3];
int d[3]={0,0,0};
int i,j,m;
clrscr();
printf("Please input 9 numbers to combine the matrix(3*3):\n");
for(i=0;i<3;i++)
{
printf("\n");
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
}for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
b[j][i]=a[i][j];
}
for(i=0;i<3;i++)
{
m=b[i][0];
for(j=1;j<3;j++)
if(b[i][j]>m)
{
m=b[i][j];
d[i]=j;
}
c[i]=m;}
printf("\n\nThe Matrix is:");
for(i=0;i<3;i++)
{
printf("\n\n");
for(j=0;j<3;j++)
printf("%5d",a[i][j]);
}printf("\n\nThe result is:");
for(i=0;i<3;i++)
printf("%5d[%d][%d]",c[i],d[i],i );getch();
}
我的思路是因为开始我以为无法直接比较二维数组列的元素的大小,所以首先我把数组a[3][3]转置为b[3][3],再利用行比较。但问题来了,转来转去,转到最后,我的确是可以输出那个最大的元素,但元素的下标错了!现在上面的程序已经修正过来,都是经过同学的指点而成功的。问题就是我转来转去,转到最后我都不知道到底i是行还是j是行。更令我想不到的就是居然那个j(就是转置数组的行)要用一个数组来存放,否则就无法正确显示。还有一个致命伤就是那个用来存放j的数组要初始化,这个我做梦也不会想到。
虽然自己觉得自己的方法思路清晰,但做起来真的超级麻烦,用了2个二维数组,2个一维数组。如果不是解释一下,看到那么长的程序一定会看晕的~~~
天啊!怎么自己的思路会兜那么大一个圈子呢?