Trang 1 trên tổng số 8 123... Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 80 kết quả

Đề tài: Tìm số nguyên dương nhỏ hơn 1000 có nhiều ước nhất

  1. #1
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    Mặc định Tìm số nguyên dương nhỏ hơn 1000 có nhiều ước nhất


    Yêu cầu : Tìm (các) số nguyên dương nhỏ hơn 1000 và có nhiều ước nhất
    Ví dụ :
    12 có 6 ước : 1,2,3,4,6,12
    15 có 4 ước : 1,3,5,15
    =========>>>>>>>>>> vậy 12 có nhiều ước hơn 15


    Mô tả
    + Code chạy đúng : 7 điểm (kết quả đúng 6 điểm , sẽ vote giải thuật manual)

    + Style C chuẩn : 1 điểm (nếu theo C++ style thì trước khi đưa lời giải nói rõ là C++ style, chuẩn dựa theo msdn,codeproject, cpp reference.)

    + Grammar C chuẩn : 1 điểm (Grammar c chuẩn có nghĩa là, đưa source đó vào 1file .c phải biên dịch được, ko có lỗi )

    + Đệ quy hoặc sáng tạo : 1 điểm

    Ai ko thích đừng spam nha, mình ra đề chỉ mong update tư tưởng và tư duy cho các new mem thôi, ko có ý thách đố

    mình sẽ chấm các bài làm của các bạn và sẽ đưa ra những lời khuyên bổ ích
    Đã được chỉnh sửa lần cuối bởi langman : 09-03-2011 lúc 10:10 PM. Lý do: update thêm ví dụ
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  2. #2
    Ngày gia nhập
    12 2010
    Bài viết
    129

    Anh langman ơi ! Có đoạn em vẫn chưa hiểu. Có nhiều ước nhất là sao hả anh???

  3. #3
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    Trích dẫn Nguyên bản được gửi bởi linhcodervn Xem bài viết
    Anh langman ơi ! Có đoạn em vẫn chưa hiểu. Có nhiều ước nhất là sao hả anh???
    ok em a đã up lên ví dụ giải thích cho đề bài
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  4. #4
    Ngày gia nhập
    08 2010
    Nơi ở
    Home-Hà Đông
    Bài viết
    51

    Thử phát

    C Code:
    1. //tim so nguyen nho hon 1000 co nhieu uoc nhat
    2. #include<stdio.h>
    3. #include<conio.h>
    4. int so_uoc(int a)   //ham dem so uoc cua so a cho truoc
    5. {
    6.     int dem=1,i;    //dem = 1 vi a cung la uoc cua a
    7.     for (i=1;i<=a/2;i++)   if (a%i==0) dem++;
    8.     return dem;
    9. }
    10. int main()
    11. {
    12.     int i,uoc_max=1,so=1;
    13.     printf("\nChuong trinh tim so nguyen nho hon 1000 co nhieu uoc nhat!\n");
    14.     for (i=1;i<=1000;i++)    if (so_uoc(i)>uoc_max)
    15.                                            {
    16.                                                 uoc_max=so_uoc(i);
    17.                                                 so=i;
    18.                                            }
    19.     printf("So nguyen nho hon 1000 co nhieu uoc nhat la %d voi %d uoc.",so,uoc_max);
    20.     getch();
    21. }

    Kết quả ra số 840 với 32 ước. (có file đính kèm source rồi nhé )
    Đã được chỉnh sửa lần cuối bởi heroandtn3 : 09-03-2011 lúc 10:35 PM. Lý do: Anh gỡ bỏ đính kèm, chỉ cần xem source là a bít được source có đúng grammar ko mà

  5. #5
    Ngày gia nhập
    10 2010
    Bài viết
    42

    Đây là bài của em, kết quả có một số duy nhất là 840.
    PHP Code:
    #include <stdio.h> 
    #include <conio.h>
    #define MAX 1000

    int DemUoc(int n);
    int TimMax(int a[], int n);
    void TimSoCoNhieuUocNhat();

    void main()
    {
        
    printf("(Cac) so nguyen nho hon 1000 va co nhieu uoc nhat la: ");
        
    TimSoCoNhieuUocNhat();
        
    printf("\n");
    }

    int DemUoc(int n)
    {
        
    int s 0;

        for (
    int i 1<= ni++)
            if (
    == 0)
                
    s++;

        return 
    s;
    }

    int TimMax(int a[], int n)
    {
        
    int max a[0];

        for (
    int i 1ni++)
            if (
    a[i] > max)
                
    max a[i];

        return 
    max;
    }

    void TimSoCoNhieuUocNhat()
    {
        
    int a[MAX], i;

        for (
    01000i++)
            
    a[i] = DemUoc(i);

        for (
    01000i++)
            if (
    a[i] == TimMax(a1000))
                
    printf("%d "i);


  6. #6
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    Mặc định Tìm số nguyên dương nhỏ hơn 1000 có nhiều ước nhất

    Trích dẫn Nguyên bản được gửi bởi heroandtn3 Xem bài viết
    Thử phát

    C Code:
    1. //tim so nguyen nho hon 1000 co nhieu uoc nhat
    2. #include<stdio.h>
    3. #include<conio.h>
    4. int so_uoc(int a)   //ham dem so uoc cua so a cho truoc
    5. {
    6.     int dem=1,i;    //dem = 1 vi a cung la uoc cua a
    7.     for (i=1;i<=a/2;i++)   if (a%i==0) dem++;
    8.     return dem;
    9. }
    10. int main()
    11. {
    12.     int i,uoc_max=1,so;
    13.     printf("\nChuong trinh tim so nguyen nho hon 1000 co nhieu uoc nhat!\n");
    14.     for (i=1;i<=1000;i++)    if (so_uoc(i)>uoc_max)
    15.                                            {
    16.                                                 uoc_max=so_uoc(i);
    17.                                                 so=i;
    18.                                            }
    19.     printf("So nguyen nho hon 1000 co nhieu uoc nhat la %d voi %d uoc.",so,uoc_max);
    20.     getch();
    21. }

    Kết quả ra số 840 với 32 ước. (có file đính kèm source rồi nhé )

    + Code chạy đúng : 7 điểm

    + Style C chuẩn : 0.5 điểm chú ý xuống dòng for và if đừng viết thế, trừ 0.5 điểm cho lỗi này

    + Grammar C chuẩn : 1 điểm

    + Đệ quy hoặc sáng tạo : 0.25 điểm (sáng tạo)

    =======> 8.75 điểm

    Trích dẫn Nguyên bản được gửi bởi bookhe Xem bài viết
    Đây là bài của em, kết quả có một số duy nhất là 840.
    PHP Code:
    #include <stdio.h> 
    #include <conio.h>
    #define MAX 1000

    int DemUoc(int n);
    int TimMax(int a[], int n);
    void TimSoCoNhieuUocNhat();

    void main()
    {
        
    printf("(Cac) so nguyen nho hon 1000 va co nhieu uoc nhat la: ");
        
    TimSoCoNhieuUocNhat();
        
    printf("\n");
    }

    int DemUoc(int n)
    {
        
    int s 0;

        for (
    int i 1<= ni++)
            if (
    == 0)
                
    s++;

        return 
    s;
    }

    int TimMax(int a[], int n)
    {
        
    int max a[0];

        for (
    int i 1ni++)
            if (
    a[i] > max)
                
    max a[i];

        return 
    max;
    }

    void TimSoCoNhieuUocNhat()
    {
        
    int a[MAX], i;

        for (
    01000i++)
            
    a[i] = DemUoc(i);

        for (
    01000i++)
            if (
    a[i] == TimMax(a1000))
                
    printf("%d "i);

    về cơ bản, bài giải này đã nâng cấp lên tổng quát hơn, nên code chạy time cao hơn, đó là bản chất của quá trình tổng quát hóa , ko sao cả

    + Code chạy đúng : 7 điểm

    + Style C chuẩn : 0.8 điểm

    + Grammar C chuẩn : 1 điểm

    + Đệ quy hoặc sáng tạo : 0 điểm

    =======> 8.8 điểm

    update :
    1. int TimMax(int a[], int n);
    có thể viết lại kà
    int TimMax(int *a, int n);

    thêm vào đó bản thân hàm TimMax chỉ truy cập đến các giá trị trong mảng a chứ ko làm thay đổi mảng a, nên ta có thể viết chuẩn là
    int TimMax(const int *a, int n);

    2. DemUoc nên giảm 1 mốc đi , trong th tổng quát thì vẫn đúng




    P/S : @ 2 bạn : 2 bạn code khá đó
    @all : mong chờ thêm "+ Đệ quy hoặc sáng tạo : 1 điểm"
    Đã được chỉnh sửa lần cuối bởi langman : 09-03-2011 lúc 11:27 PM.
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  7. #7
    Ngày gia nhập
    10 2009
    Nơi ở
    ThăngLong.delay(1000);
    Bài viết
    313

    Code này thì giả sử kết quả gồm nhiều số thì chỉ in được 1 số thôi,
    đệ quy đây, hàng về:

    C Code:
    1. #include <stdio.h>
    2. #define N 1000
    3.  
    4. int SoCacUoc(int n, int m, int u){// phan tich ra thua so nguyen to roi dem cac uoc
    5.     return (n==1)? m+1:(n%u)? (m+1)*SoCacUoc(n, 0, u+1): SoCacUoc(n/u, m+1, u);
    6. }
    7.  
    8. int SoCoNhieuUocNhat(int n){// duyet va so sanh
    9.     if (n<2) return 1;
    10.     int a=SoCoNhieuUocNhat(n-1);
    11.     return (SoCacUoc(n,0,2)>SoCacUoc(a,0,2))? n: a;
    12. }
    13.  
    14. int main(){
    15.    
    16.     printf("So co nhieu uoc nhat la: %d", SoCoNhieuUocNhat(N));
    17.  
    18.     return 0;
    19. }

  8. #8
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    Trích dẫn Nguyên bản được gửi bởi vietduc Xem bài viết
    Code này thì giả sử kết quả gồm nhiều số thì chỉ in được 1 số thôi,
    đệ quy đây, hàng về:

    C Code:
    1. #include <stdio.h>
    2. #define N 1000
    3.  
    4. int SoCacUoc(int n, int m, int u){// phan tich ra thua so nguyen to roi dem cac uoc
    5.     return (n==1)? m+1:(n%u)? (m+1)*SoCacUoc(n, 0, u+1): SoCacUoc(n/u, m+1, u);
    6. }
    7.  
    8. int SoCoNhieuUocNhat(int n){// duyet va so sanh
    9.     if (n<2) return 1;
    10.     int a=SoCoNhieuUocNhat(n-1);
    11.     return (SoCacUoc(n,0,2)>SoCacUoc(a,0,2))? n: a;
    12. }
    13.  
    14. int main(){
    15.    
    16.     printf("So co nhieu uoc nhat la: %d", SoCoNhieuUocNhat(N));
    17.  
    18.     return 0;
    19. }

    Mô tả
    + Code chạy đúng : 6.8 điểm (có trouble với từ các trong đề bài, nên trừ 0.2 điểm)

    + Style C chuẩn : 0.5 điểm (trừ 0.5 điểm vì style ko theo yêu cầu đề bài)

    + Grammar C chuẩn : 1 điểm (Grammar c chuẩn có nghĩa là, đưa source đó vào 1file .c phải biên dịch được, ko có lỗi )

    + Đệ quy : 1 điểm

    ====> 9.2 điểm

    vietduc: style ko theo đề bài, đi làm thì đừng theo ý mình ,e nên theo yêu cầu của team, công ty để khỏi bị thiệt thòi nhé (khuyên chân thành)

    code khá lắm, viết đệ quy cũng nhanh, khâm phục khâm phục,

    nhưng a có ý kiến nhỏ, nhẩm tính thấy hàm SoCacUoc được gọi 147748 lần, chà chà chà, khá nhiều đấy, a nghĩ em có thể hạ nó xuống mức 1000 lần đấy, a nghĩ e hoàn toàn có thể lái xuống mức đó
    Nếu em có thể hạ xuống 1000 lần sẽ tặng em 10 điểm cho khả năng phát triển đệ quy


    Nếu em có thể chứng minh hàm SoCacUoc được gọi 147748 lần a sẽ tặng em 0.5 điểm nữa
    (nếu cài bẫy vào hàm SoCoNhieuUocNhat để chứng minh thì chỉ được 0.4 điểm tặng)


    @all : còn chưa ai nghĩ đến "sáng tạo"
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  9. #9
    Ngày gia nhập
    12 2009
    Nơi ở
    bế quan tu lại
    Bài viết
    846

    C++ Code:
    1. #include <iostream>
    2. #include <math.h>
    3.  
    4. int checkPrimes (const int &x){
    5.     if(x == 2 || x == 3)
    6.         return true;
    7.     if(x == 1 || x % 2 == 0 || x % 3 == 0)
    8.         return false;
    9.     long j = sqrtl(x);
    10.     int k = 2;
    11.     for(int i = 5; i <= j; i += k, k = 6 - k)
    12.         if(x % i  == 0)
    13.             return false;
    14.     return true;
    15. }
    16.  
    17. int Find(){
    18.     int max1, max = 0;
    19.  
    20.     for(int i = 1; i <= 1000; i ++){
    21.  
    22.         int count = 0;
    23.  
    24.         if(checkPrimes(i))
    25.             continue;
    26.  
    27.         else{
    28.             for(int j = 1; j <= i; j ++)
    29.                 if(i % j == 0)
    30.                     count ++;
    31.             }
    32.  
    33.         if(count > max){
    34.             max = count;
    35.             max1 = i;
    36.         }
    37.     }
    38.  
    39.     return max1;
    40. }
    41.  
    42. int main(int argc, int **argv){
    43.     int res;
    44.     res = Find();
    45.     std::cout << res << std::endl;
    46.     std::cin.get();
    47.     return 0;
    48. }
    49.  
    50.  
    51. }
    code của em bằng C++

  10. #10
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    aydada
    + Code chạy đúng : 6.8 điểm (có trouble với từ các trong đề bài, nên trừ 0.2 điểm, giả sử có 2 số có 32 ước thì sao)

    + Style C chuẩn : 0.5 điểm (trừ 0.5 điểm vì style ko theo yêu cầu đề bài, yêu cầu rõ ràng mà còn bị mắc lỗi này, hic hic, chú ý vì khi đi làm trong công ty người ta cũng ngặt nghèo cái vụ style lắm)

    + Grammar C chuẩn : 1 điểm

    + Sáng tạo: 0.5 điểm (Cách mới lẽ ra được 1 điểm sáng tạo nhưng trừ 0.5 điểm vì chưa biết kế thừa sự sáng tạo của người khác)

    8.15 điểm
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

Các đề tài tương tự

  1. Tìm số nguyên n nhỏ nhất sao cho tổng từ 1 đến n lớn hơn 1000
    Gửi bởi quoccuong1991cltg trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 23
    Bài viết cuối: 19-09-2018, 11:01 PM
  2. Database cách nhập nhiều nguyên liệu cho một món ăn trong một form quản lý nguyên liệu món ăn
    Gửi bởi mamachue92 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 31-10-2012, 09:55 AM
  3. Kỹ thuật C++ Cộng 2 số nguyên dương rất lớn(1000 chữ số)
    Gửi bởi MrKem trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 02-10-2012, 06:23 PM
  4. Bài tập C Biểu diễn 2^1000 dưới dạng số nguyên dài!!?
    Gửi bởi prime122 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 25-02-2011, 01:26 PM
  5. Liệt kê các số nguyên tố nhỏ hơn 1000
    Gửi bởi kienchochethahaha trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 26
    Bài viết cuối: 05-03-2010, 05:48 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn