PDA

View Full Version : Mọi người giải giúp bài này với. nhớ là phải chuẩn đấy



tranthanh_ht
02-11-2011, 04:21 PM
Đổi chỗ (2 điểm)
Tìm số tự nhiên nhỏ nhất có chữ số hàng đơn vị là D, sao cho khi chuyển chữ số hàng đơn vị lên vị trí trước chữ số đầu tiên của số đó thì được số mới gấp K lần số cũ.
• Dữ liệu vào: Nhập từ tệp MOVE.INP gồm 2 số nguyên D và K, các số cách nhau tối thiểu một dấu cách.
• Kết quả: Ghi vào tệp MOVE.OUT số tìm được, hoặc -1 nếu không tìm được số thoả mãn.
Ví dụ
MOVE.INP MOVE.OUT
7 5 142857

__Deep__
02-11-2011, 04:41 PM
pascal hả ku, hay C++, ko nói rõ thì sao mà biết ??

tranthanh_ht
02-11-2011, 08:10 PM
pascal.
không có thì nói hướng giải quyết cũng đc chứ sao. lại còn hỏi vậy chứ. nản:unhappy:

__Deep__
02-11-2011, 08:13 PM
ẹc, nói thế thì thoy, bày đặt :bad:
zz

Tuân_se7en
02-11-2011, 10:11 PM
Không hiểu gì luôn =)) cái này mà ko làm được à kém thế chú e

Sevlyorum
02-11-2011, 10:36 PM
Giới hạn là bao nhiêu ?

tranthanh_ht
03-11-2011, 08:35 PM
thôi mà. mình cứ tưởng có bài viết mới đang hí hửng .. tự dưng bạn lại không nói gì... tụt hết cả hứng nên mới trách vậy thôi!
xử lý giúp mình đi.
bài này không cho giới hạn. nếu cho giới hạn thì cũng chẳng phải hổi làm gì?

hai_bk
03-11-2011, 09:42 PM
thôi mà. mình cứ tưởng có bài viết mới đang hí hửng .. tự dưng bạn lại không nói gì... tụt hết cả hứng nên mới trách vậy thôi!
xử lý giúp mình đi.
bài này không cho giới hạn. nếu cho giới hạn thì cũng chẳng phải hổi làm gì?

Nói vớ vẩn. Bất kì cái máy tính nào cũng có giới hạn tính toán của nó, không về không gian thì cũng về thời gian. Kiểu dữ liệu trong các ngôn ngữ lập trình cũng đều có giới hạn cả.
Nếu bảo là có giới hạn thì hỏi làm gì vậy thì thì mình cho bạn cái giới hạn là max là số có 100 chữ số đấy. Đảm bảo là trừ Matlab và các ngôn ngữ tính toán khoa học ra không có ngôn ngữ lập trình nào định nghĩa sẵn 1 kiểu dữ liệu đạt được độ lớn 100 chứ số đâu. Có giới hạn rồi đấy tự làm đi cho khỏe. :D
Mình nghĩ là trước khi nhờ ai đó làm việc gì thì bạn nên xem lại cái cách hỏi của mình. Đọc bài của bạn với cái giọng văn kèm theo chắc nhiều người làm được người ta cũng không giúp đâu. Còn ít tuổi thì ngoài học văn hóa ở trường thì cũng nên học "văn hóa" thật sự nữa. trong đó giao tiếp là vấn đề cơ bản .
Bài này cũng chả có gì, mình lấy luôn cái vi dụ input của bạn để minh họa thuật toán, còn đâu bạn phải tự Code thôi vì mình ko học Pascal và cũng không có thời gian.
Input: D=5 K=7 --> Tận cùng bằng 7.
Theo đề bài --> tận cũng bằng 57 (tự suy nghĩ tại sao)
--> số cần tìm có dạng a57.
Theo đề suy ra (a57) *5= 7a5 --> bài toán trở nên đơn giản nhưng chưa ra ngay đâu, tự biến đổi toán học ra và tự tìm tiếp lời giải xem cần thêm biến gì để có thể Code!
Nếu vẫn chưa ra thì tự nghĩ đến khi nào ra thì thôi, phần còn lại theo mình thì đơn giản rồi mặc dù vẫn cần phải tư duy tí nhưng thế thôi, lưu ý chữ in đậm! Nếu mình giải chi tiết nó mất hay và cũng làm mất khả năng sáng tạo của bạn.

tranthanh_ht
04-11-2011, 10:31 PM
đấy là sao chép y nguyên đề bài. lúc đầu m cũng tưởng dễ ai ngờ không thấy có giới hạn.
đây là bộ test các bạn xem thử.
các bạn thử xem với đề này mà cũng không có giới hạn thì ra trường hợp -1 mình cũng không thấy thuyết phục lắm.

Test D K Số cần tìm
1 9 4 230 769
2 8 4 205 128
3 6 4 153 846
4 5 4 128 205
5 7 4 179 487
6 3 7 -1
7 9 8 1 139 240 506 329
8 8 2 421 052 631 578 947 368
9 6 2 315 789 473 684 210 526
0 9 7 1 304 347 826 086 956 521 739

__Deep__
04-11-2011, 10:39 PM
cần lắm ko, anh nhờ thằng Long chó 08 - 11 nó làm cho, mấy bài này nó vô đối rồi

HLN1994
04-11-2011, 11:05 PM
@tranthanh_ht: Nếu không vội thì mai mình sẽ giúp bạn, được chứ :D. Mà theo ý tưởng của anh Hải là đúng rồi đó. Nhưng nếu không nêu giới hạn thì có lẽ bài này phải xử lý số lớn mới ổn :D

Sandara_park
04-11-2011, 11:28 PM
chẳng hiểu giề=))=))=))=)) mình dốt đặc cái này=))=))

hai_bk
04-11-2011, 11:36 PM
@tranthanh_ht: Nếu không vội thì mai mình sẽ giúp bạn, được chứ :D. Mà theo ý tưởng của anh Hải là đúng rồi đó. Nhưng nếu không nêu giới hạn thì có lẽ bài này phải xử lý số lớn mới ổn :D
Ý tưởng trên của anh thô sơ vậy thôi, Có ý tưởng khác tinh tế hơn là dùng quy hoạch động. dò ngược thôi :D
Ví dụ D=7, K=5 --> Tận cùng là 7. Do 7*5=35--> số tiếp theo là 5 --> tận cùng là 57
57*5=285--> số tiếp theo sẽ là 8 (tự suy nghĩ tại sao)... ---> 857*5=4285--> số tiếp theo là 2 -->........ cứ như vậy cho đến khi bài toán dừng hoặc nó lặp lại tuần hoàn thì kết luận không có đáp án
Cần check thử ví dụ khác nhé D=9, K=4--> tận cùng là 9. 9*4=36--> tiếp theo là 6!
69*4= 276--> tiếp theo là 7. 769*4=3067--> tiếp theo sẽ là 0
0769*4=3076--> tiếp theo là 3. --> 30769*4= 123076--> tiếp theo phải là 2 --> 230769*4= 923076--> ở đây nhận thấy lặp lại số 9--> kết luận số cần tìm là 230 769 :D Xong!
Sơ sơ thế phần còn lại bạn nào làm thì suy nghĩ để tối ưu hóa thêm, chắc tối ưu thêm thì không cần dùng đến số lớn đâu (cài đặt thư viện số lớn chắc cũng mất kha khá thời gian rồi) :D

tranthanh_ht
05-11-2011, 11:10 AM
mình chỉ không biết là duyệt từ đâu đến đâu thôi. vì bài này dành cho học sinh học chương trình tin học cấp 3.(không phải trường chuyên) quy hoạch động thì mình không biết.
chắc là duyệt đến số cuối cùng của kiểu longint hoặc Extended tốt nhất ?

HLN1994
05-11-2011, 01:09 PM
Nếu là không dành cho hệ chuyên thì không cần phải xử lý số lớn. Bạn làm theo tưởng anh Hải là ổn ;)

tranthanh_ht
05-11-2011, 04:56 PM
công nhận, cách đó ngắn, hay hơn nhiều.
cảm ơn mọi người rất nhiều!

thao_nc
05-11-2011, 05:04 PM
Ý tưởng trên của anh thô sơ vậy thôi, Có ý tưởng khác tinh tế hơn là dùng quy hoạch động. dò ngược thôi :D
Ví dụ D=7, K=5 --> Tận cùng là 7. Do 7*5=35--> số tiếp theo là 5 --> tận cùng là 57
57*5=285--> số tiếp theo sẽ là 8 (tự suy nghĩ tại sao)... ---> 857*5=4285--> số tiếp theo là 2 -->........ cứ như vậy cho đến khi bài toán dừng hoặc nó lặp lại tuần hoàn thì kết luận không có đáp án
Cần check thử ví dụ khác nhé D=9, K=4--> tận cùng là 9. 9*4=36--> tiếp theo là 6!
69*4= 276--> tiếp theo là 7. 769*4=3067--> tiếp theo sẽ là 0
0769*4=3076--> tiếp theo là 3. --> 30769*4= 123076--> tiếp theo phải là 2 --> 230769*4= 923076--> ở đây nhận thấy lặp lại số 9--> kết luận số cần tìm là 230 769 :D Xong!
Sơ sơ thế phần còn lại bạn nào làm thì suy nghĩ để tối ưu hóa thêm, chắc tối ưu thêm thì không cần dùng đến số lớn đâu (cài đặt thư viện số lớn chắc cũng mất kha khá thời gian rồi) :D


bạn ơi! hay thật, mình không phương pháp này. ngốc thật.
cho mình hỏi là bài toán này bạn xuất phát từ những bài như thế nào để mình rút ra vậy? hay là do suy luận toán học luôn thế?

HLN1994
05-11-2011, 05:11 PM
Nếu bạn học về lập trình và biết cách tư duy Tin học theo Toán học thì bạn hoàn toàn có thể suy luận ra :D