昨天我做了一道题,大概是这样的:输入三个整数,实现从大到小的输出。而我的想法很简单:任意两个数先比大小,比完大的或小的数再和另一个数比较。想法很简单,但在代码实现上,却很复杂。我的一段代码如下:
if (a > b)
{
if (a > c)
{
if (c > b)
{
printf(" % d % d % d\n", a, c, b);
}
.........
这是在if语句内又嵌套了多个if,的确能够解决问题,但十分烦琐。我的方法并非坏,蛋液并非是最优解。这样一个简单的问题用几十行代码明显不划算。
我这个比大小的方法的内在是我并不明确打印的三个位置的顺序,而是通过比较完再决定顺序(abc,acb......)。但我后来又发现了一个更为简单的方法。即:我明确打印顺序为a,b,c。而当a<b和c的时候执行交换即可。这么说可能不太理解,代码如下:
int a = 0; int b = 0; int c = 0;
scanf("%d%d%d", &a, &b, &c);
if (a < b)
{
int tmp = a;
a = b;
b = tmp;
}
if (a < c)
{
int tmp2 = a;
a = c;
c = tmp2;
}
if (b < c)
{
int tmp3 = b;
b = c;
c = tmp3;
}
printf("%d %d %d", a, b, c);
在这里我只截取了关键部分。这样只需进行三次的交换,就可实现,而并非像我之前的几十行代码。
总之,还是要继续加油。