Đến nội dung

Hình ảnh

giúp đệ về môn TIN HỌC với mấy huynh

- - - - -

  • Please log in to reply
Chủ đề này có 9 trả lời

#1
nguyen quang hao

nguyen quang hao

    Lính mới

  • Thành viên
  • 6 Bài viết
cho một dãy kí tự, viết chuơng trình để chuyển dãy thành dãy đảo ngược VD 123456 chuyển thành 654321
quang hào

#2
math_galois

math_galois

    Sĩ quan

  • Thành viên
  • 313 Bài viết
bạn chuyển dãy kí tự ra số ( dùng ord ) rồi lưu vào mảng, sau đó xuất ra với thứ tự ngược lại.

#3
Duck_Pro

Duck_Pro

    Impossible = I'm Possible

  • Thành viên
  • 229 Bài viết
Hoặc bạn cũng có thể lập ra một mảng với kiểu dữ liệu là word rồi lưu luôn cái dãy trên của bạn vào, sau đó lộn ngựoc nó lại bằng phép lặp for ... to/
Hình đã gửi

#4
quanghoa

quanghoa

    Sĩ quan

  • Thành viên
  • 364 Bài viết
Pascal for i=1 to length(st) write(st[length(st)-i+1));
C, C++ for(i=1;i<=strlen(st);i++) printf("%1c",st[strlen(st)-i+1])
Phải không nhỉ
Hình đã gửiHình đã gửiHình đã gửiHình đã gửiHình đã gửiHình đã gửiHình đã gửiHình đã gửiHình đã gửiHình đã gửi

#5
Duck_Pro

Duck_Pro

    Impossible = I'm Possible

  • Thành viên
  • 229 Bài viết
Ý tui không phải vậy nhưng làm cách trên cũng được (thực ra là ngắn hơn)
Hình đã gửi

#6
quanghoa

quanghoa

    Sĩ quan

  • Thành viên
  • 364 Bài viết

Ý tui không phải vậy nhưng làm cách trên cũng được (thực ra là ngắn hơn)

Ý trên đã mập mờ, ý dưới càng mập mờ hơn. Chả hiểu
Hình đã gửiHình đã gửiHình đã gửiHình đã gửiHình đã gửiHình đã gửiHình đã gửiHình đã gửiHình đã gửiHình đã gửi

#7
Duck_Pro

Duck_Pro

    Impossible = I'm Possible

  • Thành viên
  • 229 Bài viết
Cách của tui là như thế này:

var A:array[1..n] of char; (với n là biến mà sau này ta cho bằng length(st))
for i:=1 to n do A[i]:=B[n-i]; (B[i] là cái dãy mà ta nhập vào)
for i:=1 to n do write(A[i]);

Đó, cách của tui là như vầy, dài hơn cách của quanghoa nhiều nhưng được cái nó dễ hiểu. OK?
Hình đã gửi

#8
nguyen quang hao

nguyen quang hao

    Lính mới

  • Thành viên
  • 6 Bài viết
cam on moi nguoi nha
quang hào

#9
cloud

cloud

    Lính mới

  • Thành viên
  • 6 Bài viết
bài này chỉ cần 1 mảng với 1 biến tạm

k:=length(s);
for i:=1 to div (length(s),2) do
begin
t:=a[i];
a[i]:=a[k-i+1];
a[k-i+1]:=t;
end;

#10
Magus

Magus

    Trung tá

  • Hiệp sỹ
  • 2781 Bài viết

cho một dãy kí tự, viết chuơng trình để chuyển dãy thành dãy đảo ngược VD 123456 chuyển thành 654321

Bài này là bài mở rộng của bài sau:

Cho một mảng, hãy đưa giá trị đầu tiên về cuối dãy (tạm gọi là mảng A, n là số phần tử của mảng):
Vd dãy là 1 2 3 4 5 6 7 8 9 sẽ thành 2 3 4 5 6 7 8 9 1

với bài đó thì cách giải rất đơn giản:
T&#58;=A&#91;1&#93;;
For i&#58;=1 to N-1 do
A&#91;i&#93;&#58;=A&#91;i+1&#93;;
A&#91;N&#93;&#58;=T;
và bài toán của nguyen quang hao thực chất là bài toán có đề bài cụ thể như sau:

Cho một mảng N phần tử, hãy đưa K (K<=N) phần tử đầu dãy về cuối dãy

Lập tức, một giải thuật tự nhiên là làm như bài tóan trên, thực hiện K lần như vậy. Lúc này độ phức tạp tính tóan sẽ là O(k.n). Trường hợp K và N lớn thì không ổn.

Ta có cách tiếp cận khác, ta thử đảo ngược K phần tử đầu của mảng, rồi đảo ngược N-K phần tử cuối của mảng, giả sử K = 3 với dãy như trên ta có dãy sau:
3 2 1 9 8 7 6 5 4
so sánh với dãy kết quả đúng phải là: 4 5 6 7 8 9 1 2 3.
Ta thấy nó là dãy đảo ngược của dãy kết quả => vậy chỉ cần đảo ngược tòan bộ mảng một lần nữa thôi.
Như vậy ta có thuật tóan chạy với độ phức tạp là O(2n) không phụ thuộc vào K.
For i&#58;=1 to K div 2 do
begin
   A&#91;i&#93;		 &#58;=A&#91;k-i +1&#93; XOR A&#91;i&#93;;
   A&#91;k-i + 1&#93;&#58;=A&#91;k-i +1&#93; XOR A&#91;i&#93;;
   A&#91;i&#93;		 &#58;=A&#91;k-i +1&#93; XOR A&#91;i&#93;;
end;

For i&#58;=K+1 to &#40;N-K&#41; div 2 do
begin
   A&#91;i&#93;			&#58;=A&#91;i&#93; XOR A&#91;N-i +K+1&#93;;
   A&#91;N-i +K+1&#93;&#58;=A&#91;i&#93; XOR A&#91;N-i +K+1&#93;;
   A&#91;i&#93;			&#58;=A&#91;i&#93; XOR A&#91;N-i +K+1&#93;;
end;

For i&#58;=1 to N div 2 do
begin
   A&#91;i&#93;		 &#58;=A&#91;N-i +1&#93; XOR A&#91;i&#93;;
   A&#91;N-i + 1&#93;&#58;=A&#91;N-i +1&#93; XOR A&#91;i&#93;;
   A&#91;i&#93;		 &#58;=A&#91;N-i +1&#93; XOR A&#91;i&#93;;
end;
Trên đây chỉ là cài đặt cơ bản của thuật tóan trên, nó sẽ chạy chậm trong PASCAL nếu chỉ dẫn $R được bật lên, nếu thế thì bạn nên dùng con trỏ để truy xuất từng phần tử của mảng sẽ chạy nhanh hơn nhiều do tránh được việc kiểm tra chỉ số mảng của PASCAL.
Giả sử mảng A chứa các phần tử kiểu integer.
Var P,Q&#58;^integer;
P&#58;=@A&#91;1&#93;;
Q&#58;=@A&#91;k&#93;;
For i&#58;=1 to K div 2 do
begin
  P^&#58;=P^ XOR Q^;
  Q^&#58;=P^ XOR Q^;
  P^&#58;=P^ XOR Q^;
  inc&#40;P&#41;;
  dec&#40;Q&#41;;
end;

P&#58;=@A&#91;K+1&#93;;
Q&#58;=@A&#91;N&#93;;
For i&#58;=1 to &#40;N-K&#41; div 2 do
begin
  P^&#58;=P^ XOR Q^;
  Q^&#58;=P^ XOR Q^;
  P^&#58;=P^ XOR Q^;
  inc&#40;P&#41;;
  dec&#40;Q&#41;;
end;

P&#58;=@A&#91;1&#93;;
Q&#58;=@A&#91;N&#93;;
For i&#58;=1 to N div 2 do
begin
  P^&#58;=P^ XOR Q^;
  Q^&#58;=P^ XOR Q^;
  P^&#58;=P^ XOR Q^;
  inc&#40;P&#41;;
  dec&#40;Q&#41;;
end;

Nguồn: diendantinhoc
<div align="center"><img src="http://img221.images...4795706ld2.jpg" border="0" class="linked-image" /><br />

<!--fonto:Verdana--><span style="font-family:Verdana"><!--/fonto--><a href="http://diendantoanho...0&#entry168717" target="_blank">Hướng dẫn gõ công thức toán lên diễn đàn cho người mới</a><!--fontc--></span><!--/fontc--></div>

<br /><div align="center"><!--fonto:Verdana--><span style="font-family:Verdana"><!--/fonto--><a href="http://diendantoanho...howtopic=38505" target="_blank">Cách gõ công thức toán mới</a><br /><a href="http://diendantoanho...id=1&Itemid=18" target="_blank"><!--coloro:#008000--><span style="color:#008000"><!--/coloro--><b>Bạn có muốn gửi bài viết của mình lên trang chủ không?</b><!--colorc--></span><!--/colorc--></a><!--fontc--></span><!--/fontc--></div><br /><div align="center"><!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto--><!--sizeo:2--><span style="font-size:10pt;line-height:100%"><!--/sizeo-->em=Console.ReadLine();Console.Write("Anh yêu {0}",em);<!--sizec--></span><!--/sizec--><!--fontc--></span><!--/fontc--></div>




0 người đang xem chủ đề

0 thành viên, 0 khách, 0 thành viên ẩn danh