Chào mừng bạn đến với Selfomy Hỏi Đáp, hãy Hỏi bài tập hoặc Tham gia ngay
0 phiếu
940 lượt xem
manh7a1 trong Tin học lớp 11 bởi Tiến sĩ (18.9k điểm)

Viết các số tự nhiên từ 1 đến 2009 theo một vòng tròn cùng chiều quay kim đồng hồ. Cũng theo chiều đó, bắt đầu từ số 1, cứ đếm từ 1 đến số thứ 612 thì xoá số đó đi. Lại bắt đầu từ số còn lại đứng ngay sau số vừa bị xoá, lặp lại quá trình đến khi còn 1 số thì dừng lại.
a) Hỏi số còn lại là số nào?
b) Muốn số còn lại là số thứ L (0

1 Câu trả lời

0 phiếu
manh7a1 bởi Tiến sĩ (18.9k điểm)
được bầu chọn là câu hỏi hay nhất bởi
 
Hay nhất

Ý tưởng cho lời giải:

  • Dùng một mảng a có 2009 phần tử (từ 1 đến 2009) kiểu boolean. Khởi động cho tất cả các giá trị của mảng làtrue (chưa được đánh dấu).
  • Duyệt và đếm xuất phát từ phần tử đầu tiên, phần tử nào của mảng có giá trị true (chưa đánh dấu) thì mới đếm, khi đếm đủ 612 số thì đánh dấu phần tử thứ 612 đó (False), khi duyệt đến phần tử cuối cùng của mảng thì quay lại đầu mảng. Khi nào chỉ còn 1 phần tử chưa đánh dấu thì dừng lại và phần tử đó chính là đáp án câu a.
  • Đáp án câu b được suy ra từ câu a. Bởi các số từ 1 đến 2009 xếp theo một vòng tròn cùng chiều quay kim đồng hồ

Chương trình viết bằng pascal để các bạn tham khảo:

var a:array[1..2009] of boolean;
  i,j,n,dem,L,b:integer;
  begin
       Write('L=');readln(L);
       for i:=1 to 2009 do a[i]:=true;
       n:=2009; j:=1;
       while n>1 do
        begin
            dem:=0;
            while dem < 612 do
              begin
                  if a[j] then dem:=dem+1; if dem = 612 then a[j]:=false;
                  if j=2009 then j:=1 else j:=j+1;
              end;
            n:=n-1;
        end;
       for i:= 1 to 2009 do if a[i] then j:=i;
       writeln('so doc dac:',j);

       b:=1+L-j;
       if b>2009 then b:=b-2009;while b

Còn đây là chương trình học sinh của mình (Minh) viết bằng cách sử dụng đệ quy:

PROGRAM So_doc_dac;
USES crt;
VAR dem,x,L:WORD;
    a:ARRAY[1..2009] OF WORD;
PROCEDURE try(x:WORD);
VAR i:WORD;
BEGIN
  i:=0;
  WHILE i<612 DO
    BEGIN
      IF a[x]<>0 THEN i:=i+1;
      IF i=612 THEN a[x]:=0;      
      x:=x+1;                     
      IF x>2009 THEN x:=1;
    END;
  dem:=dem+1;
  IF dem=2008 THEN exit
  ELSE try(x);
END;

BEGIN
  clrscr;                     
  write('L = '); readln(L);
  WHILE (L=0) OR (L>2009) DO
    BEGIN
      writeln;
      writeln('So ban nhap khong hop le');
      write('Nhap lai: L =  ');
      readln(L);  
    END;
  {cau a}
  FOR x:=1 TO 2009 DO a[x]:=x;
  x:=1; dem:=0;
  try(x);
  x:=1;
  WHILE a[x]=0 DO x:=x+1;
  writeln('So doc dac la ',a[x]);
  {cau b}
  IF L>=80 THEN x:=L-79
  ELSE x:=L+1930;
  writeln('Muon so con lai la ',L,' thi xuat phat tu so ',x);
  readln;  
END.

Các câu hỏi liên quan

+2 phiếu
2 câu trả lời 6.2k lượt xem
đã hỏi 14 tháng 7, 2017 trong Địa lý lớp 6 bởi trannhat900 Phó giáo sư (52.9k điểm)
+1 thích
2 câu trả lời 2.1k lượt xem
Viết chương trình cho phép trộn hai dãy số A và B cùng có số phần tử là k để được dãy số C theo yêu cầu sau: A = a1, a2 … ak B = b1, b2 … bk Được C = a1, b1, a2, b2 … ak, bk.
đã hỏi 16 tháng 10, 2019 trong Tin học lớp 11 bởi manh7a1 Tiến sĩ (18.9k điểm)
0 phiếu
6 câu trả lời 17.0k lượt xem
đề bài: đố em tính đc trên 1 chiếc đồng hồ khi kim giờ quay đc 1 vòng thì kim phút, kim giây quay đc bao nhiêu vòng?
đã hỏi 16 tháng 11, 2016 trong Toán lớp 7 bởi hoanglinh2814 Tiến sĩ (12.8k điểm)
0 phiếu
1 trả lời 1.5k lượt xem
Nhập vào từ bàn phím số tự nhiên n (n<1000). Hãy phân tích n thành tích các thừa số nguyên tố.</p> VD: Nhập vào n = 9 được 9 = 3.3
đã hỏi 17 tháng 10, 2019 trong Tin học lớp 11 bởi manh7a1 Tiến sĩ (18.9k điểm)
0 phiếu
1 trả lời 220 lượt xem
Viết chương trình cho nhập hai số tự nhiên N và k. Hãy cho biết chữ số thứ k tính từ trái sang phải trong số N là số mấy? nếu ... dài của N hoặc k bằng 0 thì thông báo không tìm được.
đã hỏi 21 tháng 10, 2019 trong Tin học lớp 11 bởi manh7a1 Tiến sĩ (18.9k điểm)
+2 phiếu
1 trả lời 429 lượt xem
Viết chương trình nhập vào số tự nhiên N (N lẻ), sau đó điền các số từ 1 đến n2 vào trong một bảng vuông sao cho tổng ... ng chéo đều bằng nhau (bảng này được gọi là Ma phương).
đã hỏi 13 tháng 10, 2019 trong Tin học lớp 11 bởi manh7a1 Tiến sĩ (18.9k điểm)
0 phiếu
1 trả lời 777 lượt xem
Viết chương trình cho phép nhập n số và in ra theo thứ tự ngược lại. Ví dụ nhập 3, 5, 7 thì in ra 7, 5, 3. a.Hướng dẫn: Dùng biến ... ;c số vừa nhập. Cho i chạy từ n về 1 để in các số vừa nhập.
đã hỏi 16 tháng 10, 2019 trong Tin học lớp 11 bởi manh7a1 Tiến sĩ (18.9k điểm)
0 phiếu
3 câu trả lời 716 lượt xem
Tại sao kim đồng hồ chạy theo chiều từ trái sang phải?
đã hỏi 5 tháng 11, 2017 trong Khác bởi Tí Vua Đệ Nhất Tiến sĩ (28.1k điểm)

HOT 1 giờ qua

  1. trannhat900trannhat900

    52948 Điểm

  2. phamngoctienpy1987844phamngoctienpy1987844

    50728 Điểm

  3. vxh2k9850vxh2k9850

    35980 Điểm

  4. Nqoc_bakaNqoc_baka

    34614 Điểm

Phần thưởng hằng tháng
Hạng 1: 200.000 đồng
Hạng 2: 100.000 đồng
Hạng 3: 50.000 đồng
Hạng 4: 20.000 đồng
Phần thưởng bao gồm: mã giảm giá Shopee, Nhà Sách Phương Nam, thẻ cào cùng nhiều phần quà hấp dẫn khác sẽ dành cho những bạn tích cực nhất của tháng. Xem tại đây
Bảng xếp hạng cập nhật 30 phút một lần
...