Có bác nào rành Pas cal và thuật toán chỉ giúp em bài này với

Từ 5 chữ số 1, 2, 3, 4, 5 ta lập ra tất cả các con số có đúng 5 chữ số. Các con số này được xếp theo thứ tự từ nhỏ đến lớn, con số nhỏ nhất là 11111 được đánh mã số 1; số kế tiếp là 11112 được đánh mã số 2; số kế tiếp 11113 được đánh mã số 3; tiếp tục cho đến hết các con số.
Yêu cầu:
Cho trước một số n có đúng 5 chữ số lấy từ các chữ số 1, 2, 3, 4, 5.
a) Tìm số chữ số khác nhau của con số n.
b) Tìm mã số của con số n.

Dữ liệu: Vào từ file văn bản DL.INP
- Gồm 1 dòng chứa số n
Kết quả: Lưu vào file text KQ.OUT
- Dòng đầu tiên chứa số chữ số khác nhau của số n.
- Dòng thứ hai chứa mã số của con số n
DL.INPKQ.OUT
111212
6
 

quanltv

Sư phụ của ADMIN
Đếm số chữ số khác nhau của 1 dãy đặt tên là A (mảng 1 chiều)

1. Tạo ra 1 mảng B chứa các chữ số khác nhau của dãy
  • Bước 1: đưa phần tử đầu tiên của A vào B
  • Xét từ phần tử thứ 2 của mảng A, tìm xem trong B đã có hay chưa (duyệt tất cả các phần tử), nếu chưa thì thêm vào, tăng độ dài của B lên 1. Nếu gặp 1 phần tử mà bằng luôn thì thoát ngay khỏi vòng lặp đó.
  • Cứ thế làm đến phần tử cuối của A
2.Đếm các phần tử của B sẽ được dòng 1 của KQ.OUT

(to be continue)
 

quanltv

Sư phụ của ADMIN
Nếu đúng là các chữ số từ 1 đến 5, thì có thể quy về các số từ 0-4. Tạo ra hệ cơ số 5, đổi ra hệ 10 (thập phân) là ra số thứ tự ngay.
 

quanltv

Sư phụ của ADMIN
Cám ơn nhe anh quanltv

Bài là đầy đủ cho bạn nhé.

Mã:
Program thanhydhth_11_02;
Var f1,f2: text;
    a,b: array[1..10] of byte;
    n,vitri,luythua: word;
    m,i,j,dem: byte;
    check: boolean;


BEGIN
  writeln('=================================');
{Lay so n tu file}
  assign(f1,'C:\DL.INP');
  reset(f1);
  readln(f1,n);
  close(f1);


{Tach so n thanh mang A co 5 phan tu}
  for i:=5 downto 1 do
  begin
    a[i]:=n mod 10;
    n:= n div 10;
  end;


{Tao mang B chua cac phan tu khac nhau cua A}
  m:=1; b[1]:=a[1];
  for i:=2 to 5 do
  begin
    check:= true;
    for j:=1 to m do
      if a[i]=b[j] then begin check:= false; break; end;
    if check then begin m:=m+1; b[m]:=a[i]; end;
  end;


{Dem so luong cua B}
  dem:=m;
  writeln('So cac phan tu khac nhau cua A = ',dem);
  readln;


{Giam n di 111111 hay giam moi phan tu cua A di 1 don vi}
  for i:=1 to 5 do
    a[i]:=a[i]-1;


{Doi he co 5 sang he thap phan}
  luythua:=1; vitri:=0;
  for i:=5 downto 1 do
  begin
    vitri:= vitri + a[i]*luythua;
    luythua:= luythua*5;
  end;


  vitri:= vitri+1;
  writeln('Vi tri cua so N = ',vitri);
  readln;


{Dua ket qua ra file}
  assign(f2,'C:\KQ.OUT');
  rewrite(f2);


  writeln(f2,dem);
  writeln(f2,vitri);


  close(f2);


  writeln('Viec ghi du lieu ra file da hoan tat.');
  readln;
END.
 

Bài viết đang hot

Thống kê

Chủ đề
102,777
Bài viết
470,596
Thành viên
340,591
Thành viên mới nhất
Quang Nguyễn NĐ
Top