erlang初学小练习

来源:互联网 发布:物业公司软件 编辑:程序博客网 时间:2024/05/23 14:41
-module(delive).
-compile(export_all).

sum(X, Y) ->
      if  X >= 9, Y >= 9 ->
           io:format("~w * ~w = ~w~n", [X, Y, X * Y]);
         X > Y ->
           io:format("~w * ~w = ~w", [X, Y, X * Y]),
           sum(X, Y + 1);
         X =< Y ->
           io:format("~w * ~w = ~w~n", [X, Y, X * Y]),
           sum(X + 1, 1)
      end.

sum() ->
    sum(1, 1).


上面是九九乘法表

-module(servertest).
-export([start/0, stop/0, myget/1, myset/2]).


start() ->
    register(testserver, spawn(fun loop/0)).


stop() ->
    testserver ! stop.


myget(Key) ->
    testserver ! {self(), get, Key},
    receive
        {_Pid, Response} ->
       Response
    end.


myset(Key, Value) ->
    testserver ! {self(), set, Key, Value},
    receive
        {_Pid, Response} ->
        Response
    end.


loop() ->
    receive
   {From, get, Key} ->
     From ! {self(), get(Key)},
     loop();
   {From, set, Key, Value} ->
     put(Key, Value),
     From ! {self(), ok},
     loop();
   {From, stop} ->
     From ! stop;
   _ ->
     error
  end.

题目一
有1,2, 3, 4个数字,能组成多少个互不相同且不重复的三位数?都是多少?

-module(c1).
-export([count/1]).

count(N)  ->
    C = [X * 100 + Y * 10 + Z ||
      X <- N, Y <- N, Z <- N, X =/= Y, Y =/= Z, X =/= Z
    ],
    length(C).

题目二
企业发放的奖金根据利润提成,利润低于或等于10万元,奖金可提10%;利润高于10万元低于20万元时,低于10万元的部分按10%提成,高于10万元的部分可提成7.5%;20万元到40万元,高于20万元的部分,可提成5%。

-module(c2).
-export([profit_count/1]).


profit_count(N)  ->
     if 
        N =< 100000             ->
          P = 100000 * 0.1;
        N > 100000, N < 200000  ->
          P = 100000 * 0.1 + (N - 100000) * 0.075;
        N >= 200000, N < 400000 ->
          P = (N - 200000) * 0.05
     end,
     io:format("The profit is ~p~n", [P]).

题目三
一个整数,它加上100后是一个完全平方数,再加上268又是一个完全平方数,请问该数是多少?

-module(c3).
-export([sqrt_num/0, sqrt_num/1]).


sqrt_num()   ->
    lists:filter(fun(X) -> is_integer(X) end, [sqrt_num(X) || X <- lists:seq(1, 100)]).

sqrt_num(X) ->
     T1 = X + 100,
     R1 = trunc(math:sqrt(T1)),
     T2 = X + 268,
     R2 = trunc(math:sqrt(T2)),
    

     if
       (T1 == R1 * R1) and (T2 == R2 * R2)  ->
           X;
       true ->
         ok
      end.

题目四
输入某年某月某日,判断这一天是这一年的第几天?

-module(c4).
-export([which_day/3]).

which_day(Y, M, D)  ->
        List = [month_length(Year, Month) || Year <- [Y], Month <- lists:seq(1, M - 1)],
        list_size(List, D).

month_length(Year, Month) ->
    Leap = if
              Year rem 400 == 0  ->
                   leap;
              Year rem 100 == 0  ->
                   not_leap;
              Year rem 4 == 0    ->
                   leap;
              true               ->
                   not_leap
            end, 
            case Month of
                 3 -> 31;
                 2 when Leap == leap -> 29;
                 2 -> 28;
                 1 -> 31;
                 4 -> 30
             end.

list_size([Head | Tail], Result) ->
      list_size(Tail, Head + Result);
list_size([], Result) ->
      Result.

题目五
打印所有的“水仙花数”所谓的“水仙花”数即一个三位数,其各位数字的立方和等于该数

-module(c7).
-export([print_flower/0]).


print_flower()  ->
    [X * 100 + Y * 10 + Z || X <- lists:seq(1, 9), Y <- lists:seq(0, 9), Z <- lists:seq(0, 9), X * X * X + Y * Y * Y + Z * Z * Z == X * 100 + Y * 10 + Z].


题目六
讲一个正整数分解质因数,如90=2*3*3*5

-module(c8).
-export([prime_factor/1]).

prime_factor(N) ->
     H  =  [I || I <- lists:seq(2, N)],
     prime(H, N).


prime([H | T], N) ->
    if
      N rem H =:= 0 ->
          io:format("~w ", [H]),
          prime_factor(N div H);
      true ->
         prime(T, N)
    end;

prime([], _) ->
    ok.

原创粉丝点击