Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 2 của 2
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Xác định tính tuần hoàn của một số .

    Trong đề thi lý thuyết cuối kỳ của trường em có một câu như vầy :


    Một số nguyên được gọi là tuần hoàn nếu có sự lập lại của một nhóm chữ số ít nhất một lần . Ví dụ 141414 là số tuần hoàn có chu kỳ 14 ; số 141411 không tuần hoàn . Viết hàm thực hiện các yêu cầu sau :

    a. Xác định một số có tuần hoàn theo một chu kỳ cho trước hay không với nguyên mẫu sau :

    int tuanhoantheochuky(long n,long ck);

    Hàm trên nhận một số nguyên n và một số được xem là chu kỳ ck ; hàm trả về kết quả đúng (1) nếu số n là tuần hoàn theo chu kỳ ck . Ngược lại trả về kết quả sai (0) .

    b. Xác định một số có tuần hoàn hay không , nếu có trả về kết quả đúng (1) và trả về chu kỳ thông qua tham số con trỏ với nguyên mẫu sau :

    int tuanhoan(long n,long *pck);

    Hàm trên nhận một số nguyên n và một con trỏ đến một số nguyên . Hàm trả về kết quả đúng (1) nếu số n là tuần hoàn và sẽ gán chu kỳ vào biến nguyên chỉ đến bởi pck . Nếu không trả về kết quả sai (0).
    Ở câu a. thì em viết thì chương trình nó chạy đc nhưng mà em không nghĩ đc làm như nào nó nhẹ nhàng hơn ạ :

    Mã nguồn PHP:
    #include<math.h> #include<stdio.h> #include<conio.h> int sochuso(int n); int tuanhoantheochuky(long n,long ck); void main() { int h=tuanhoantheochuky(123123123,123); printf("%d",h); getch(); } int sochuso(int n) { int dem=0; while(n!=0) { n=n/10; dem=dem+1; } return dem; } int tuanhoantheochuky(long n,long ck) { int m=sochuso(n); int k=sochuso(ck); int g=m-k; int S=0; for(int l=0;(l<=g);l=l+k) { S=S+ck*(pow(10,l)); } if(S==n) { return 1; } return 0; }  
    Còn câu b. thì em không làm được ạ. [IMG]images/smilies/Cry.gif[/IMG]

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi materazzi
    Trong đề thi lý thuyết cuối kỳ của trường em có một câu như vầy :



    Ở câu a. thì em viết thì chương trình nó chạy đc nhưng mà em không nghĩ đc làm như nào nó nhẹ nhàng hơn ạ :
    Còn câu b. thì em không làm được ạ. [IMG]images/smilies/Cry.gif[/IMG]
    Có thể làm như thế này nè.

    Mã:
    #include <stdio.h> int heso(long n){    int m = 10;    while (n/m) m*=10;    return m;} int tuanhoantheochuky(long n,long ck){    long temp = 0, hs = heso(ck);    while (n > temp)temp = temp*hs + ck;     return n == temp;} int tuanhoan(long n,long * &pck){    long ck, hs=1; int ok;    do    {        hs = hs*10;        ck = n % hs;        ok = tuanhoantheochuky(n,ck);    }   while (n > ck && !ok);    if (ok && n != ck)    {        pck = new long(ck);        return 1;    }    return 0;}void main(){    long n = 12121212,ck=1212, *pck;    if(tuanhoantheochuky(n,ck)) printf("
    %d la so tuan hoan theo %d
    ",n,ck);    else printf("
    %d khong la so tuan hoan theo %d
    ",n,ck);    if(tuanhoan(n,pck))     {        printf("
    %d la so tuan hoan voi chu ky nho nhat la %d
    ",n,*pck);        delete pck;    }    else printf("
    %d khong la so tuan hoan
    ",n);}

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •