bạn mrvuongpro nói vậy là sai rồi. Theo tui hiểu ở đây thì việc ai hoặc là số nguyên tố hoặc là ước của a1 đến ai-1 có nghĩa là ai hoặc la ước của a1 hoặc là số nguyên tố.
Nhưng bài giải của bạn nkvuong là không hề đúng. Giả sử số N = 19 thì theo cách của bạn thì dãy dài nhất là: 19 17 13 11 7 5 3 2 1 (chỉ có 9 số) mà dãy dài nhất đáng ra phải là: 18 17 13 11 9 7 6 5 3 2 1 (có những 11 số)
[=========> Bổ sung bài viết <=========]
đây là bài của mình làm:
program dshp;
uses crt;
const max = 10000;
var
N, i, a, c, d, e, S: Integer;
b: array[1..max] of Integer;
function snt(n: Integer): Boolean;
var
i: Integer;
begin
if n = 1 then
begin
snt := False;
Exit;
end
else
for i := 2 to n div 2 do
if n mod i = 0 then
begin
snt := False;
Exit;
end;
snt := True;
end;
begin
clrscr;
repeat
Write('Nhap so N la: '); Readln(N);
until N > 0;
Write('Day so la:');
if N = 1 then
begin
write(N);
Readln;
Exit;
end
else
for a := N downto 2 do
begin
c := 0;
d := 0;
for i := a + 1 to N do
if snt(i) = True then inc(c);
for i := 2 to a do
if (a mod i = 0) and (snt(i) = False) then inc(d);
b[a] := d - c;
end;
S := b[2];
for a := 3 to N do
if b[a] > S then S := b[a];
for a := 2 to N do
if b[a] = S then e := a;
Write(' ', e);
for i := e - 1 downto 1 do
if (snt(i) = True) or (e mod i = 0) then Write(' ', i);
Readln;
end.
Về ý tưởng thì đúng rồi nhưng có đoạn
S := b[2];
for a := 3 to N do
if b[a] > S then S := b[a];
for a := 2 to N do
if b[a] = S then e := a;
Write(' ', e);
mình vẫn phân vân không biết có đúng không, chẳng biết có lúc nào tồn tại 2 số mà hiệu của số ước số không nguyên tố của số đấy với số số nguyên tố nằm trong khoảng từ số đấy đến N không? Ai pro sửa cho mình đoạn đấy với.
Được sửa bởi thinh94 lúc 22:01 ngày 06-10-2009 Reason: Bổ sung bài viết
Bài này không quá phức tạp mà.
Ước của ước của N cũng là ước của N.
Số nguyên tô khong có ước.
=> Dãy hạnh phúc là các ước của N là các số nguyên tố nhỏ hơn N.
Nkvuong làm đúng rồi mà.
Mà bài này cũng có người hỏi rồi này.
http://www.ddth.com/showthread.php?t=161218
Nếu bạn đọc đề không cẩn thận thì sẽ không để ý là nó bắt in dãy dài nhất với a1 không vượt quá N chứ không phải là a1 phải bằng N. Tui đã nói lí do tại sao a1 có thể không phải = N rồi. Đề nghị bạn neiht1992 đọc bài viết của người khác cho kĩ rồi hãy phát biểu.
Hic, em cũng có 1 đề thi cấp quận mà nó định nghĩa cái dãy số hạn phúc khác cơ. Bác nào nhiệt tình chỉ giúp em cách làm (càng dễ hiểu càng tốt, vì em còn gà mờ lém) thì em cám ơn nhìu lắm ^^
Bài 2: Dãy số hạnh phúc
Dãy a gồm N chữ số gọi là dãy số hạnh phúc nếu tồn tại số K sao cho (1=<k<n):
Tổng các phần tử a1+a2+…+ak bằng tổng các phần tử Ak+1+…aN
Yêu cầu: Hãy kiểm tra xem dãy gồm N chữ số cho trước có phải là dãy hạnh phúc hay ko, nếu có hãy đưa ra giá trị k nhỏ nhất thỏa điều kiện trên.
Dữ liệu: Vào từ file văn bản Ticket.inp
• Dòng đầu chứa số N (1=<N=<1000)
• Dòng thứ hai chứa các số A1, A2,…An. Hai số dc ghi cách nhau bởi khoảng trắng
Kết quả: Ghi ra file văn bản Ticket.out số k tìm dc. Trong trường hợp dãy chữ số ko thỏa tính chất dãy hạnh phúc ghi ra số 0.
Ví dụ:
Ticket.inp Ticket.out
10
6 4 9 1 0 0 3 2 7 8 4
Em là thành viên mới vô, hân hạnh dc làm quen với mọi người và mong mọi người giúp đỡ, em còn 1 số bài nữa em sẽ post sau, thanks mọi người ^^
Mình nghĩ bác hiểu sai đề bài rồi. Dãy phải bắt đầu từ N, mà dãy của bác lại bắt đầu từ N-1.
Chứng minh thuật toán đúng thì vô cùng đơn giản. Dãy là giảm dần nên For ngược. Bắt đầu là N, sau đó các số sau hoặc là nguyên tố, hoặc là ước của N, VD ai là ước của a2 mà a2 lại là ước của N nên ai là ước của N. Số nguyên tố thì chỉ có ước là 1 và chính nó nên ko phải lo số sau có phải là ước của số nguyên tố trước đó hay không. Bài này code chỉ 10 dòng là hết
Oài !Cho mình hỏi cái bài này nhák .Mình học đội tuyển wận ,ông thầy đội tỉn đố cái bài này .Theo như thằng bạn nói thì kết hợp xóa trùng và hoán vị còn các bác thì seo cin cho em lời giải đáp tận tình .Thanks nhìu !!
cho một dãy gồm N (N<=100) số nguyên dương a1,a2,...an đôi một khác nhau ,giá trị mỗi số không vượt quá 10000 .Một dãy con được tạo từ dãy đã cho bằng cách chọn ra một số phần tử trong dãy đã cho đó nhưng phải giữ đúng thứ tự ban đầu.Một dãy con gọi là "dãy con nguyên tố "nếu hai phần tử bất kì nằm cạnh nhau trong dãy con đó đều nguyên tố cùng nhau .
VD:N=10
5 7 9 15 12 4 6 13 8 21
xuất :5 7 9 4 13 8 21
Mình nghĩ thế này .
Viết 1 hàm kiểm tra ước
Đầu tiên cho 1 vòng for các cá thể
Kiểm tra 2 số kề nhau có ước chung bé nhất ko . Nếu trả về True thì xuất ra
Để tránh bị trùng khi xuất nên lưu giá trị vào 1 mảng rồi loại giá trị trùng
Cơ bản là thế này
Code:#include<iostream.h> #include<conio.h> #include<math.h> int uc(int a, int b) { if(a==0||b==0) return a+b; while(a!=b) { if (a>b) a=a-b; else b=b-a; } return a; } int m[100],m1[100],n,k; void nhap( int &n) { cout<<" Nhap N \n"; cin>>n; for(int i = 0 ; i <n; i ++) cin>>m[i]; } void xuat(int k ) { for(int j = 0 ; j < k; j ++ ) if(m1[j]!=0) cout<<m1[j]<<" "; } void process() { k = 0 ; for (int i = 0 ; i <n; i ++) if (uc(m[i],m[i+1])==1) { m1[k]=m[i]; k++; m1[k]=m[i+1]; k++; } for(i = 0 ; i < k;i++ ) if (m1[i]==m1[i+1]) m1[i]=0; xuat(k); } int main() { nhap(n); process(); getch(); }
Được sửa bởi thanhbinh777 lúc 22:11 ngày 12-11-2009
àh cảm ơn bạn !Nhưng cho mình hỏi bạn viết bài này theo turbo pascal hay là chương trình khác dậy ????
Bookmarks