1. 程式人生 > >用 Haskell 求解 ACM 競賽題(3):順序結構程式設計

用 Haskell 求解 ACM 競賽題(3):順序結構程式設計

三位數反轉

例題 三位數反轉:輸入一個三位數, 分離出它的百位、 十位和個位,反轉後輸出。

樣例輸入: 127
樣例輸出: 721

【分析】 首先將三位數讀入變數 n, 然後進行分離。 百位等於 n/ 100( 注意這裡取的是商 的整數部分),十位等於 n/10% 10(這裡的%是取餘數操作),個位等於 n%10。程式如下:程式1-6三位數反轉

C 語言程式碼如下:

#include <stdio.h>
int main() { 
	int n; 
	scanf("% d", &n); 
	printf("% d% d% d\ n", n% 10, n/ 10% 10, n/ 100); 
	return 0;
}

Haskell 程式碼如下:

main = do
    s <- getLine
    let n = read s :: Int
    return ((mod n 10) * 100 + mod (div n 10) 10 * 10 + div n 100)

哈哈,Haskell 程式碼終於比 C 語言看起來舒服一些了。

交換變數

例題 交換變數: 輸入兩個整數 a 和 b, 交換 二者 的 值, 然後 輸出。

樣例輸入: 824 16
樣例輸出: 16 824

【分析】 按照題目所說, 先把輸入存入變數 a 和 b, 然後交換。 如何交換兩個變數 呢? 最 經典的方法是三變數法:

C 語言程式碼:

#include <stdio.h> 
int main() { 
	int a, b, t; 
	scanf("% d% d", &a, &b); 
	t = a; 
	a = b; 
	b = t; 
	printf("% d %d\ n", a, b); 
	return 0; 
}

Haskell 程式碼:

main = do
    a <- getLine
    b <- getLine
    let t = a
    let a = b
    let b = t
    return (a, b)

我覺得 Haskell 語言程式碼越來越漂亮了!