Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: Tìm số ự nhiên là cấp số nhân

  1. #1
    Ngày gia nhập
    03 2008
    Nơi ở
    Nhà tù
    Bài viết
    37

    Red face Tìm số ự nhiên là cấp số nhân

    Bài tập: Tìm số tự nhiên có ban chữ số. Ba chữ số này, theo trật tự từ trái qua phải tạo thành một cấp số nhân

    C Code:
    1. #include <stdio.h>
    2. #include <string.h>
    3. #include <math.h>
    4. #include <ctype.h>
    5. int kt(float x)
    6. {
    7.    char s[100];
    8.  
    9.    int i;
    10.     itoa(x,s,10);
    11.      for(i=0;i<strlen(s);i++)
    12.  
    13.           if(s[i]!=',')
    14.             return (1);
    15. }
    16. int main()
    17. {
    18. int a,c;
    19. float y;
    20.     for(a=1;a<9;a++)
    21.      for(c=1;c<9;c++)
    22.        if(kt(sqrt(a*c))==1)
    23.           printf("%d\n",100*a+10*(sqrt(a*c))+c);
    24.  
    25.  
    26. }
    Hướng giải quyết của mình là : nếu b^2=a*c thì sqrt(a*c) là số nguyên thì in ra. Nhưng bài của mình chạy không được, mà mình thì không biết tại sao !

  2. #2
    Ngày gia nhập
    01 2009
    Nơi ở
    Hà Nội
    Bài viết
    205

    Có 3 chữ số lập thành cấp số nhân thì nhanh nhất là ngồi mà tính ra còn nhanh hơn

  3. #3
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Chương trình sai 3 chỗ :
    - Hàm itoa chuyển từ kiểu int sang chuỗi. Nếu bạn đưa vào số float nó sẽ ép kiểu qua số nguyên và chuyển sang chuỗi -> chuỗi chắc chắn ko chứa dấu thập phân.

    - Dấu ngăn cách phần nguyên và phần thập phân là dấu '.' chứ ko phải dấu '.'

    - Chỗ này nữa :
    C Code:
    1. if(s[i]!=',') return (1);
    Theo cách này thì chỉ một phần tử trong chuỗi s khác ',' thì trả về đúng -> sai. Ví dụ như chuỗi s = "123,456" thì chỉ cần '1' khác ',' là trả về đúng ngay. Coi như hàm này luôn trả về đúng.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  4. #4
    Ngày gia nhập
    03 2008
    Nơi ở
    Nhà tù
    Bài viết
    37

    C Code:
    1. #include <stdio.h>
    2. #include <string.h>
    3. #include <math.h>
    4. #include <ctype.h>
    5. int kt(float x)
    6. {
    7.    if(x==(int)x)
    8.      return 1;
    9.  
    10. }
    11. int main()
    12. {
    13. int a,c;
    14. float y;
    15.     for(a=1;a<=9;a++)
    16.      for(c=1;c<=9;c++)
    17.       {
    18.          y=sqrt(a*c);
    19.  
    20.           if(kt(y)==1)
    21.             printf("%f\n",100*a+10*y+c);
    22.  
    23.       }
    24. }
    Đây là bài sửa của mình. Có cách nào mà làm nhanh hơn cách này không vậy các bạn
    Đã được chỉnh sửa lần cuối bởi kegiaumat055 : 28-02-2009 lúc 05:28 PM.

  5. #5
    Ngày gia nhập
    01 2009
    Nơi ở
    Hà Nội
    Bài viết
    205

    Tại sao a và c lại không được quyền bằng 9?

  6. #6
    Ngày gia nhập
    03 2008
    Nơi ở
    Nhà tù
    Bài viết
    37

    Mặc định Tìm số ự nhiên là cấp số nhân

    Mình nhầm !

  7. #7
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Bạn thử cách này xem. Tuy đây ko phải là cách nhanh nhất nhưng nó cũng loại được khá nhiều trường hợp đó :

    C Code:
    1. #include <stdio.h>
    2.  
    3. int main()
    4. {
    5.     int a, b, c;
    6.    
    7.     for(a=1;a<=2;a++)
    8.     {
    9.         for(b=a+1;b<=9;b++)
    10.         {
    11.             for(c=b+1;c<=9;c++)
    12.             {
    13.                 if ((b % a) == 0 && (c % b) == 0 && (c / b == b / a))
    14.                     printf("%d\n",c + b * 10 + a * 100);
    15.             }
    16.         }
    17.     }
    18. }

    Giải thích thêm : cấp số nhân trong trường hợp này thì công bội phải nguyên -> công bội nhỏ nhất là 2. Do có 3 số nên công bội phải được dùng đến 2 lần -> 2*2 = 4. Do 9 là chữ số lớn nhất nên chữ số nhỏ nhất trong csn phải <= 9 / 4
    Đã được chỉnh sửa lần cuối bởi meoconlongvang : 28-02-2009 lúc 05:38 PM.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  8. #8
    Ngày gia nhập
    03 2008
    Nơi ở
    Nhà tù
    Bài viết
    37

    Tại sao lại có 3 số thôi vậy. Có 12 số cơ mà

  9. #9
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    code cũ của bạn ra 12 số là sai. Mình ko biết là 3 số giống nhau có tính là csn hay ko. Nhưng nếu bỏ qua chuyện đó thì bạn vẫn tìm dư vì đề bài yêu cầu 3 số tạo thành csn theo thứ tự từ trái qua phải, tức là số trước phải nhỏ hơn số sau. Code cũ của bạn ko loại đi các trường hợp đó.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

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

  1. Sản phẩm từ tự nhiên - đồ gỗ tự nhiên
    Gửi bởi luuthily90 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 05-03-2013, 02:23 PM
  2. Sản phẩm từ tự nhiên - đồ gỗ tự nhiên
    Gửi bởi baobinh trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 01-03-2013, 03:38 PM
  3. Lập trình C Hàm tạo số ngẫu nhiên | Cách nhập giá trị ngẫu nhiên cho ma trận?
    Gửi bởi chuong01 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 15
    Bài viết cuối: 13-08-2012, 09:43 PM
  4. Bài tập C Tạo ngẫu nhiên mảng 2 chiều vuông 4X4 với các phần tử tạo ngẫu nhiên trong đoạn[0,50]
    Gửi bởi truongtrungviet trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 16
    Bài viết cuối: 16-04-2011, 08:06 AM
  5. Bài tập C++ cách sử dụng hàm in ra các số tự nhiên chẵn trong n số tự nhiên đầu tiên
    Gửi bởi tictic trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 17-04-2010, 01:17 PM

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