PDA

View Full Version : xin hoi thuat toan sau



songok
03-03-2004, 02:38
Cho day sau: 1234567891011..250 ( toi da la so 250)
yeu cau : tim ra so dau tien trong day so, cac so phai lien tiep nhau .

vidu nguoi dung go vao so : 101 thi so bat dau day la 10 , so tiep theo bat dau tu 1 , nen chi co so 11 la thoa , nhung co the viet tat .

vi du nguoi dung go vao 1012, thi so bat dau la 1012, tai vi neu so bat dau la so 10 , thi so tiep theo neu lay mot chu so la so 1 thi khong lien tiep , neu lay 2 chu so la 12 thi khong lien tiep , nen so bat dau cua day phai la 1012 luon ,

vi du neu nguoi dung go vao 10307 thi so bat dau la 10307 luon


Xin chi giup thuat toan tim tren

Vui lòng gửi bài viết bằng tiếng Việt có dấu - vikhoa

bete
04-03-2004, 16:01
Nếu người dùng gõ vào 11111 thì mình phải chọn đáp số nào: (11111), (1111 1112), (111 112) ?

bete
04-03-2004, 16:14
songok có thể thử: cho dữ liệu nhập A => tách A thành 2 phần: A = BC với C là 1 tiền tố (prefix) của B.

Ví dụ:

1) A=101 = 10 1 (B=10 & C=1; C là 1 prefix của B)

2) A=1012 = 1012 (B=1012 & C = ''; C là 1 prefix của B)

3) A=11111
= 11111 (B=11111 & C = ''; C là 1 prefix của B)
= 1111 1 (B=1111 & C = 1; C là 1 prefix của B)
= 111 11 (B=111 & C = 11; C là 1 prefix của B)

Để tách A thành 2 phần như trên có thể thử 1 cách rât dễ viết nhưng 0 hay cho lắm:
cho dữ liệu nhập A=12314 => bỏ vô 1 mảng A. Chữ số đầu tiên A[1] = 1.

1) Tìm chữ số này trong phần còn lại 2314 => A[4] = 1.
2) Nếu A[5] = A[2] thì coi thử A[6] = A[3] ?
3) Nếu A[6] = A[3] thì coi thử A[7] = A[4] ? ...............
4) Nếu A[5] <> A[2] thì quay lại bước 1

bete
04-03-2004, 16:17
Ồ, mình bỏ sót 1 tí: C là prefix của B & C phải ngắn hơn B

Ví dụ: A=123123 => B=123123; C='' (0 thể chọn B=123; C=123 được)

songok
05-03-2004, 01:52
That tinh chua hieu cach ma bete da lam , voi so A=123123, A=111111 thi so bat dau day so phai la chinh no luon chu .

bete
05-03-2004, 12:00
Nếu người dùng gõ vào 23 hoặc 234 thì só bắt đàu của bạn sẽ là gì ?
23 -> số bắt đầu là 2 hay 23 ?
234 -> số bắt đầu là 2 hay 234 ?

Tui đặt 2 giả thiết (có thể sai - nếu sai xin bạn sửa ngay dùm):

1) người dùng phải bắt đầu bằng 1 số con
2) phần còn lại sẽ là 1 phần của MỘT số con kế tiếp

=> mình in ra số con đầu tiên

Ví dụ:

1) người dùng nhập vào 21 => số con đầu tiên sẽ là 21. Người dùng 0 thể nói: "trật rồi, tui đang nghĩ đến '12345678910111 21 31415' => số đầu tiên là 12 hay 13 mới đúng". Ngươi dùng 0 thể "nhảy ngang" vô giữa 1 số con như vậy

2) Người dùng nhập vào 234 => số con đầu tiên là 234. Người dùng 0 thể nói: "trật rồi, tui đang nghĩ đến '1 234 567' => số đầu tiên là 2 mới đúng". Ngươi dùng 0 thể nhập vô nhiều hơn 2 số con

Như vậy mình tách dữ liệu nhập A thành 2 phần B & C: B là trọn 1 số con, C là 1 phần của số con kế tiệp Nếu gọi D là trọn số con kế thì B & D chỉ khác nhau 1 chữ số cuối:

Ví dụ: A = 1231 => B=123 & C=1 & D=124 : B & D là kế tiếp nhau (123 & 124) & khác nhau chỉ 1 chữ số cuối . C là 1 prefix củA D (& ngắn hơn D) => C cũng là 1 prefix của B
. Như vậy nếu mình tách A thành 2 phần B & C trong đó C là 1 prefix cu?a B (& ngắn hơn B hoặc có thể là null)

Tuy nhiên, nếu nói B & D chỉ khác nhau 1 chữ số cuối có lẽ 0 đúng: 129 & 130: khác nhau 2 chữ số cuối . Tui 0 rõ là nếu ngươig dung gõ vào 12913 thì đáp số nào là đúng:

1) 129, 130 ? (=> phải tính thêm vụ này)
2) hay 12913, 12914 ?

bete
05-03-2004, 12:09
Với A=11111 có 3 cách tách:

1) 11111, '' (B=11111 & C = ''; C là 1 prefix của B)
2) 1111, 1 (B=1111 & C = 1; C là 1 prefix của B)
3) 111, 11 (B=111 & C = 11; C là 1 prefix của B)

Néu mình chọn cách 1 (11111, '') làm đáp số thì phải chọn cách tách sao cho B càng dài càng tốt

Với A=123123 có 2 cách tách:

1) 123123, '' (B= & C = ''; C là 1 prefix của B)
2) 123, 123 (B=123 & C = 123; C là 1 prefix của B)

Nếu mình chọn cách 1 (123123, '') thì phải loại trường hợp C có độ dài bằng B (là 3 ở đây): C phải ngắn hơn B (có thể là null)

general2000vn
05-03-2004, 14:55
Mình không hiểu đề toán.

Dãy số như ở đây là dãy của những số (có 1 giá trị xác định, có thể có nhiều chữ số) hay là dãy của những chữ số (digits) ?.

Số đầu là chữ số đầu đầu hay là con số đầu tiên?

bete
05-03-2004, 16:32
Tui nghĩ là mình lây các số từ 1 tới 250 => viết dính nhau .
Số đầu là số con đầu tiên. Ví dụ 12312 => (123, 12) => (123, 124): số đầu là 123

Có phải 0 songok ?

songok
07-03-2004, 02:36
Yeu cau cua bai nay la : nhap vao mot day so bat ky , xac dinh so bat dau cua day so , so do co the 1 ,2 hay bao nhieu chu so cung duoc,
vi du 12312, thi neu so bat dau la 1 thi khong thoa, ta xet 2 chu so 12 cung khong thoa vi so tiep theo la 312 khong lien tiep, neu chon 123 thi thoa, vi so ke tiep la 12..co the la 124, con neu so la 123124 thi so bat dau cung chinh la no.

bete
07-03-2004, 08:38
songok cho hỏi : nếu nhập 12913 thì số bắt đầu có phải là 123 (129, 130) ?

songok
10-03-2004, 03:21
to bete: so bat dau la 129 vi so sau co the la 130 nhung duoc phep viet tat la 13

bete
10-03-2004, 09:53
À, nếu nhập vô 19920 -> số đầu là 199 (199, 200) ?