25.1 计算机解题具有多解的特点

即使是比较简单的问题,计算机的解题方法也不是惟一的。下面就举一个简单的例子,说明求解问题可以使用不同算法。

【例25.1】给出几个求1至100的奇数和的程序。

【解法一】剔除偶数法。


#include <stdio.h>
int main
()
{
    int i=0
, sum=0
;
    for
(i=1
; i<=100
; ++i
)
    {
          if 
(i %2 == 0
)          //
剔除偶数
                continue
;
          sum += i
;
    }
    printf
("sum=%d\n"
, sum
);     //
输出2500
    return 0
;
}
  

【解法二】改变步长法。


#include <stdio.h>
int main
()
{
     int i=0
, sum=0
;
     for
(i=1
; i<=100
; i += 2
)     //
步长为2
           sum += i
;
     printf
("sum=%d\n"
, sum
);     //
输出2500
     return 0
;
}
  

【解法三】奇数相加法。


#include <stdio.h>
int main
()
{
    int i=0
, sum=0
;
    for
(i=1
; i<=100
; ++i
)
          if 
(i %2 == 1
)          //
奇数相加
                 sum += i
;
    printf
("sum=%d\n"
, sum
);     //
输出2500
    return 0
;
}
  

这个问题简单,效率也不明显。但对大量运算的情况,就要选择合适的算法。这个例子的目的是提醒程序员解题的算法可能很多,要注意选择合适的算法。

《C语言解惑》