Mình cần giúp thuật toán 3 bài tập pascal sau
Mình cần giúp thuật toán 3 bài tập pascal sau
lệnh write dùng để viết ra màn hình.
Code:CONST {KHAI BÁO HẰNG} {1. Các phím đặc biệt và tổ hợp phím} Nul = #0; Home = #71; Enter = #13; Ends = #79; Esc = #27; Up = #72; Spacebar = #32; Down = #80; BackSpace = #8; Left = #75; Tab = #9; Right = #77; Ins = #82; PageUp = #73; Del = #83; PageDown = #81; AltA = #30; AltJ = #36; AltS = #31; AltB = #48; AltK = #37; AltT = #20; AltC = #46; AltL = #38; AltU = #22; AltD = #32; AltM = #50; AltV = #47; AltE = #18; AltN = #49; AltW = #17; AltF = #33; AltO = #24; AltX = #45; AltG = #34; AltP = #25; AltY = #21; AltH = #35; AltQ = #16; AltZ = #44; AltI = #23; AltR = #19; CtrlLeft = #115; CtrlRight = #116; CtrlEnd = #117; CtrlHome = #119; CtrlPageDown = #118; CtrlPageUp = #132; F1 = #59; ShiftF1 = #84; CtrlF1 = #94; AltF1 = #104; F2 = #60; ShiftF2 = #85; CtrlF2 = #95; AltF2 = #105; F3 = #61; ShiftF3 = #86; CtrlF3 = #96; AltF3 = #106; F4 = #62; ShiftF4 = #87; CtrlF4 = #97; AltF4 = #107; F5 = #63; ShiftF5 = #88; CtrlF5 = #98; AltF5 = #108; F6 = #64; ShiftF6 = #89; CtrlF6 = #99; AltF6 = #109; F7 = #65; ShiftF7 = #90; CtrlF7 = #100; AltF7 = #110; F8 = #66; ShiftF8 = #91; CtrlF8 = #101; AltF8 = #111; F9 = #67; ShiftF9 = #92; CtrlF9 = #102; AltF9 = #112; F10= #68; ShiftF10= #93; CtrlF10= #103; AltF10= #113; {2. Các mã phím khác: A..Z, a..z, ... => xem trong bảng mã ASCII}
Được sửa bởi ada95 lúc 08:31 ngày 05-08-2016
Bài 1: Người ta xây dựng một số A gồm vô hạn chữ số chỉ gồm các chữ số 0, 1, 2 qua một số bước như sau:
Bước 0: Gán cho chữ số đầu tiên của A là a1=0
Bước k+1: Giả sử ở bước k đã hình thành được m số hạng đầu của A là a1a2...am thì tại bước k+1 có 2m số hạng đầu của A là a1a2...amb1b2...bm mà với 1≤i≤m thì bi=(ai+1) mod 3
Như vậy các giai đoạn đầu hình thành số A như sau:
0 → 01 → 0112 → 0112.1220 → 01121220.12202001 → 0112122012202001.1220200120010112.
Yêu cầu in ra chữ số N của A. (N≤1018)
Ví dụ N=4 thì aN=2; N=8 thì aN=0.
Input: Gồm nhiều dòng, mỗi dòng ghi một số nguyên dương N
Output: Mỗi dòng ghi kết quả tương ứng
Example:
Input Output
4 2
8 0
Bài 2. Cho dãy n số nguyên dương a1, a2, ..., an. Hỏi rằng số nguyên dương nhỏ nhất không thể biểu diễn dưới dạng tổng của một hoặc nhiều số trong các số đã cho (mỗi số không quá 1 lần) là bao nhiêu.
Ví dụ: Với dãy 1, 1, 2, 2, 2, 10, 10, 15 thì số 9 là số nhỏ nhất không thể biểu diễn được.
Input: Dòng đầu ghi số n (n≤1000). Tiếp theo ghi các số a1, a2, ..., an
Output: Một dòng duy nhất ghi kết quả tìm được
Example:
Input
8
1 1 2 2 2 10 10 10
Output
9
Có bạn nào có thuật toán hay giải quyết hai bài trên không nhỉ?
Sẽ nhanh hơn nữa nếu chỉnh lại từ 2 - trunc(sqrt(n)).
Vì round làm tròn chính xác, còn trunc làm tròn xuống nên sẽ giảm bớt được đi 1 lần lặp
Thật buồn cười, mấy phím chức năng đó phải bao gồm mã #0 và mã phím.
Chứ như bạn nói Alt+D là #32, #32 chẳng phải dấu cách sao.
Nên chỉnh lại Alt+D là #0#32 mới đúng
(* SỬA ĐỔI, BỔ SUNG BÀI ĐĂNG TẠI #143 *)
{Các hằng ký tự bàn phím đặc biệt và tổ hợp phím}
(*
Mỗi khi ta nhấn một phím, trong vùng đệm 2 byte sẽ được nạp 1 hoặc 2 byte tuỳ theo kiểu phím đã nhấn. Nếu là phím thường như a, b, c, %, $,... trong vùng đệm sẽ được nạp 1 byte chứa mã ASCII của kí tự tương ứng. Nếu ta nhấn phím mở rộng như F1,..., F10, các phím dịch chuyển con trỏ, , ®, ¬, ¯, Ins (chèn), Del (xoá), PageUp/PgUp (lên một trang), PageDown/PgDn (xuống một trang),... trong vùng đệm sẽ được nạp hai byte, byte thứ nhất có giá trị 0, byte thứ hai chứa mã riêng của phím đã nhấn. Mã riêng này có thể trùng với mã của các kí tự thường. Thí dụ, khi ta nhấn phím mở rộng F10 trong vùng đệm sẽ được nạp 2 byte (0, 68). Mã riêng 68 trùng với mã của kí tự D. Hàm ReadKey cho ta kí tự của phím đã nhấn và không hiển thị kí tự đó (trên màn hình), ta gọi là hàm nhận thầm một kí tự. ReadKey trước hết kiểm tra vùng đệm bàn phím xem còn byte nào chưa được đọc không. Nếu còn, ReadKey sẽ đọc byte đó. Ngược lại, nếu vùng đệm trống, ReadKey sẽ chờ để ta nhấn một phím rồi sau đó đọc 1 byte từ vùng đệm.
*)
CONST
{Các phím thường}
Nul = #0;
BackSpace = #8;
Tab = #9;
Enter = #13;
Esc = #27;
SpaceBar = #32;
{Các tổ hợp mở rộng, đặc biệt}
Ins = #82;
Del = #83;
Home = #71;
Ends = #79;
PageUp = #73;
PageDown =#81;
Up = #72;
Down = #80;
Left = #75;
Right = #77;
Alt_A = #30;
Alt_B = #48;
Alt_C = #46;
Alt_D = #32;
Alt_E = #18;
Alt_F = #33;
Alt_G = #34;
Alt_H = #35;
Alt_I = #23;
Alt_J = #36;
Alt_K = #37;
Alt_L = #38;
Alt_M = #50;
Alt_N = #49;
Alt_O = #24;
Alt_P = #25;
Alt_Q = #16;
Alt_R = #19;
Alt_S = #31;
Alt_T = #20;
Alt_U = #22;
Alt_V = #47;
Alt_W = #17;
Alt_X = #45;
Alt_Y = #21;
Alt_Z = #44;
Ctrl_Left = #115;
Ctrl_Right = #116;
Ctrl_Home = #119;
Ctrl_End = #117;
Ctrl_PageUp = #132;
CtrlP_PageDown = #118;
F1 = #59;
F2 = #60;
F3 = #61;
F4 = #62;
F5 = #63;
F6 = #64;
F7 = #65;
F8 = #66;
F9 = #67;
F10= #68;
F11= #133; {*}
F12= #134; {*}
Shift_F1 = #84;
Shift_F2 = #85;
Shift_F2 = #85;
Shift_F3 = #86;
Shift_F4 = #87;
Shift_F5 = #88;
Shift_F6 = #89;
Shift_F7 = #90;
Shift_F8 = #91;
Shift_F9 = #92;
Shift_F10= #93;
Shift_F11= #135; {*}
Shift_F12= #136; {*}
Ctrl_F1 = #94;
Ctrl_F2 = #95;
Ctrl_F3 = #96;
Ctrl_F4 = #97;
Ctrl_F5 = #98;
Ctrl_F6 = #99;
Ctrl_F7 = #100;
Ctrl_F8 = #101;
Ctrl_F9 = #102;
Ctrl_F10= #103;
Ctrl_F11= #137; {*}
Ctrl_F12= #138; {*}
Alt_F1=#104;
Alt_F2=#105;
Alt_F3=#106;
Alt_F4=#107;
Alt_F5=#108;
Alt_F6=#109;
Alt_F7=#110;
Alt_F8=#111;
Alt_F9=#112;
Alt_F10=#113;
Alt_F11=#139; {*}
Alt_F12=#140; {*}
Alt_0 = #129;
Alt_1 = #120;
Alt_2 = #121;
Alt_3 = #122;
Alt_4 = #123;
Alt_5 = #124;
Alt_6 = #125;
Alt_7 = #126;
Alt_8 = #127;
Alt_9 = #128;
Shift_Tab = #15; {*}
Ctrl_Tab = #148; {*}
Alt_Tab = #165; {*}
Alt_Esc = #1; {*}
Alt_BackSpace =#14;{*}
Ctrl_PrintScreen = #114;
Life - Love - Freedom
Bookmarks