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

Đề tài: Tạo 1 dãy looknsay trong lập trình C++ như thế nào?

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

    Smile Tạo 1 dãy looknsay trong lập trình C++ như thế nào?

    Các bác help e cái bài này dzoi...

    Trong toán học, dãy look and say là 1 dãy các số nguyên như sau:
    1,11,21,1211,111221,312211,13112221,1113213211,...

    Để có số tiếp theo trong dãy, đọc lớn số trước đó, đếm số lần xuât hiện liên tiếp của 1 số trong dãy và nhóm chúng lại như sau:
    Vd:
    1 đọc lớn là “một số 1” hay 11
    11 đọc lớn là “hai số 1” hay 21
    21 đọc lớn là “một số 2 và một số 1” hay 1211
    1211 đọc lớn là “một số 1, một số 2, hai số 1” hay 111221
    Viết hàm để sinh ra 1 dãy tương tự với số lượng số được nhập vào
    Vd:
    Genlooknsay(2) => 1,11
    Genlooknsay(5) => 1,11,21,1211,111221

  2. #2
    Ngày gia nhập
    12 2010
    Nơi ở
    Thiếu Thất
    Bài viết
    143

    mình chưa nghĩ ra cách làm cho bài của bạn, nhưng có 1 điều muốn hỏi, nếu 10 số 1 xếp cạnh nhau thì số tiếp theo sẽ như thế nào? sẽ là ...101... à?

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

    này thì look and say
    C Code:
    1. #include<conio.h>
    2. #include<stdio.h>
    3. #include<string.h>
    4.  
    5. void langman(int n)
    6. {
    7.     char re[100]="1",buff[100]="";
    8.     int i,j,k,ib,ir;
    9.     printf("1");
    10.     for (i=1;i<n&&printf(",");i++,*buff=0)
    11.     {
    12.         for (j=0,k=1,ir=strlen(re);j<ir;j++,k++)
    13.             if (re[j]!=re[j+1])
    14.             {
    15.                 ib=strlen(buff);
    16.                 while(k!=0) // add k to buff handle made
    17.                 {
    18.                     buff[ib++]=(k%10)+'0';
    19.                     k/=10;
    20.                 }
    21.                 buff[ib++]=re[j];
    22.                 buff[ib++]=NULL;
    23.                 k=0;
    24.             }
    25.         strcpy(re,buff);
    26.         printf("%s",re);
    27.     }
    28. }
    29. void main()
    30. {
    31.     langman(5);
    32.     getch();
    33. }
    ^_,^

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

    Bùi Tấn Quang

  4. #4
    Ngày gia nhập
    08 2010
    Nơi ở
    Vô gia cư
    Bài viết
    147

    góp vui tí để qua năm mới nào
    C++ Code:
    1. #include <iostream>
    2. #include <string>
    3.  
    4. using namespace std;
    5.  
    6. void LookAndSay(int n)
    7. {
    8.     string s, val = "1";
    9.     int i, k, len;
    10.     char buffer[10];
    11.  
    12.     while(n--)
    13.     {
    14.         cout << val << endl;
    15.         s = "";
    16.         len = val.length();
    17.  
    18.         for (i = 0, k = 1; i < len; i++)
    19.         {
    20.             while(i < len-1 && val[i] == val[i+1] )
    21.             {
    22.                 k++;
    23.                 i++;
    24.             }
    25.             buffer[0] = NULL;
    26.             itoa (k, buffer, 10);
    27.             (s += buffer) += val[i];
    28.         }
    29.         val = s;
    30.     }
    31.    
    32. }
    33.  
    34. int main()
    35. {
    36.     LookAndSay(167);
    37.  
    38.     system("pause");
    39.     return 0;
    40. }

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

    Chúc mọi người: NĂM MỚI ZUI ZE
    Em chỉ biết C thôi , hjhj
    C Code:
    1. //1,11,21,1211,111221,312211,13112221,1113213211,...
    2. //Genlooknsay(2) => 1,11
    3. //Genlooknsay(5) => 1,11,21,1211,111221
    4.  
    5. //Chay n lan, Dung 1 mang a chua gia tri cua phan tu thu k ?(VD: phan tu thu 2 la: 11,
    6. //a[0] = 1, a[1] = 1),sau do xet tung phan tu cua a(nom na la vay hj),
    7. //Dem so lan xuat hien lien tiep cua a[i] gan vao b[j], sau do gan a[i] vao b[j+1]
    8. //gan nguoc mang b cho mang a(luc nay a chua phan tu thu k + 1), xuat mang a,
    9. //tiep tuc thao tac phan tu tiep theo.......
    10.  
    11. #include<stdio.h>
    12. #define MAX 1000
    13. void NhapSoNguyenDuong(int &n);
    14. int TimKichThuocMang(char M[]);//Tim kich thuoc cua mot mang
    15. char DemSoLanXuatHienLienTiep(char M[], int vt);//vt = Vi tri(chi so) cua phan tu dang xet
    16. void GanMang(char M1[], char M2[]);//Gan noi dung cua mang M1 cho mang M2
    17. void InMang(char M[]);
    18. void Genlooknsay(int n);
    19. void main()
    20. {
    21.     int n;
    22.  
    23.     NhapSoNguyenDuong(n);
    24.  
    25.     printf("Genlooknsay(%d) = ", n);
    26.     Genlooknsay(n);
    27. }
    28. //------------------------------------------------------------------------------------------------
    29. void NhapSoNguyenDuong(int &n)
    30. {
    31.     do
    32.     {
    33.     printf("Nhap n > 0\n");
    34.     scanf("%d", &n);
    35.     }
    36.     while (n <= 0);
    37. }
    38. //------------------------------------------------------------------------------------------------
    39. int TimKichThuocMang(char M[])
    40. {
    41.     for (int i = 0; M[i] > 0; i++);
    42.     return i;
    43. }
    44. //------------------------------------------------------------------------------------------------
    45. char DemSoLanXuatHienLienTiep(char M[], int vt)
    46. {
    47.     int i, d = 1;
    48.     for (i = vt; i < TimKichThuocMang(M); i++)
    49.     {
    50.         if (M[i] == M[i+1])
    51.             d++;
    52.         else
    53.             break;
    54.     }
    55.     return d;
    56. }
    57. //------------------------------------------------------------------------------------------------
    58. void GanMang(char M1[], char M2[])
    59. {
    60.     for (int i = 0; i < TimKichThuocMang(M1); i++)
    61.         M2[i] = M1[i];
    62. }
    63. //------------------------------------------------------------------------------------------------
    64. void InMang(char a[])
    65. {
    66.     for (int i = 0; i < TimKichThuocMang(a); i++)
    67.         printf("%d", a[i]);
    68. }
    69. //------------------------------------------------------------------------------------------------
    70. void Genlooknsay(int n)
    71. {
    72.     char a[MAX], b[MAX];
    73.     int l, i, j = 0;
    74.  
    75.     a[0] = 1;
    76.     InMang(a);//Chay lan 1
    77.     for (l = 2; l <= n; l++)//Chay cac lan tiep theo(neu co), (cho de hieu ay ma)
    78.     {  
    79.         for (i = 0; i < TimKichThuocMang(a); i++, j += 2)
    80.         {
    81.             b[j] = DemSoLanXuatHienLienTiep(a, i);
    82.             i += DemSoLanXuatHienLienTiep(a, i) - 1;//Nhay qua cac phan tu da dem
    83.             b[j+1] = a[i];
    84.         }
    85.  
    86.         j = 0;
    87.         GanMang(b, a);
    88.         printf(", ");
    89.  
    90.         InMang(a);
    91.     }
    92. }
    Đã được chỉnh sửa lần cuối bởi ngocthinhdp : 01-01-2011 lúc 08:16 AM.

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

    Mặc định Tạo 1 dãy looknsay trong lập trình C++ như thế nào?

    sao lại bị double thế này!
    sr mọi người
    Đã được chỉnh sửa lần cuối bởi ngocthinhdp : 01-01-2011 lúc 07:56 AM.

  7. #7
    Ngày gia nhập
    07 2008
    Bài viết
    4

    bạn pmluv có thi ở game loft hả, toàn ? mấy câu trong đề thi vậy
    bài của bạn langman không hợp lý lắm. nếu 23 chữ số 1 thì sẽ lưu là 321 @@ (dùng hàm chuyển số thành chuỗi, nếu bạn tự viết dùng % thì phải viết ngược lại)

    bài ngocthinhdp tương tự, nếu số lần xuất hiện là 2 con số thì @@

  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 ngclam Xem bài viết
    bạn pmluv có thi ở game loft hả, toàn ? mấy câu trong đề thi vậy
    bài của bạn langman không hợp lý lắm. nếu 23 chữ số 1 thì sẽ lưu là 321 @@ (dùng hàm chuyển số thành chuỗi, nếu bạn tự viết dùng % thì phải viết ngược lại)

    bài ngocthinhdp tương tự, nếu số lần xuất hiện là 2 con số thì @@
    ừa ha
    thử fix lại vậy
    C Code:
    1. #include<conio.h>
    2. #include<stdio.h>
    3. #include<string.h>
    4.  
    5. void addc2str(char *x,int k)
    6. {
    7.     int temp=strlen(x);
    8.     k!=0?addc2str(x,k/10),x[temp++]=k/10,x[temp]=0:0;
    9. }
    10. void langman(int n)
    11. {
    12.     char re[100]="1",buff[100]="";
    13.     int i,j,k,ib,ir;
    14.     printf("1");
    15.     for (i=1;i<n&&printf(",");i++,*buff=0)
    16.     {
    17.         for (j=0,k=1,ir=strlen(re);j<ir;j++,k++)
    18.             if (re[j]!=re[j+1])
    19.             {
    20.                 addc2str(buff,k);
    21.                 ib=strlen(buff);
    22.                 buff[ib++]=re[j];
    23.                 buff[ib++]=NULL;
    24.                 k=0;
    25.             }
    26.             strcpy(re,buff);
    27.             printf("%s",re);
    28.     }
    29. }
    30. void main()
    31. {
    32.     langman(5);
    33.     getch();
    34. }
    Snippet
    ^_,^

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

    Bùi Tấn Quang

  9. #9
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    @langman:
    Code em anh nghĩ vẫn chưa đúng, anh run code em không ra gì hết ngoại trừ 5 số 1.

  10. #10
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    @nothing1010:
    Bài giải của bạn hình như ra kết quả sai, mình chạy thử với n = 7:
    Code:
    1
    11
    21
    1211
    111221
    314241
    131114121411
    Press any key to continue . . .
    @all:
    My solution, let me know if you found bugs. Thanks!
    C++ Code:
    1.        
    2. #include <string>
    3. #include <iostream>
    4.  
    5. using namespace std;
    6.  
    7. class look_n_say {
    8. public:
    9.     look_n_say( int n ) : n( n ) {
    10.     }
    11.  
    12.     friend ostream& operator <<( ostream& out, const look_n_say& rhs ) {
    13.         string result;
    14.         string init_str( "1" );
    15.         out << init_str << endl;
    16.         for( int i = 1; i < rhs.n; ++i ) {
    17.             result = rhs.get_new_str( init_str );  
    18.             out << result << '\n';
    19.             init_str = result;
    20.             result.clear();
    21.         }
    22.         return out;
    23.     }
    24.  
    25. private:
    26.     string get_new_str( const string& str ) const {
    27.         int cnt( 1 );
    28.         string result;
    29.         for( string::size_type i = 0, len = str.length(); i < len; ++i ) {
    30.             if( i < len - 1 && str[i] == str[i + 1] ) {
    31.                 ++cnt;
    32.             }
    33.             else {
    34.                 result.append( 1, cnt + 48 );
    35.                 result.append( 1, str[i] );
    36.                 cnt = 1;
    37.             }
    38.         }
    39.         return result;
    40.     }
    41.  
    42. private:
    43.     int n;
    44. };
    45.  
    46. int main() {
    47.     look_n_say lns( 10 );
    48.     cout << lns << endl;
    49.     return 0;
    50. }
    Đã được chỉnh sửa lần cuối bởi rox_rook : 19-01-2011 lúc 04:31 PM.

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

  1. Làm Chữ chạy trên form C# như thẻ <marquee> trong HTML thế nào?
    Gửi bởi magnet241 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 6
    Bài viết cuối: 05-04-2012, 11:55 AM
  2. In thẻ,hóa đơn từ các textbox,combobox,datetimepicker trong form C# như thế nào?
    Gửi bởi snoit trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 04-04-2012, 03:13 PM
  3. Game Tạo Form trong suốt trong C# tựa game Thần Võ như thế nào?
    Gửi bởi tocvang_pro trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 21-09-2011, 04:21 PM
  4. Sử lí như thế nào khi nhập rất chậm trong trình xoạn thảo trong devC
    Gửi bởi toansvcn trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 13
    Bài viết cuối: 23-05-2011, 10:04 PM
  5. Code tìm kiếm trong cây nhị phân trong C++. Lỗi chỉ tìm được từ đầu tiên trong file thôi sửa thế nào?
    Gửi bởi elvish trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 1
    Bài viết cuối: 11-04-2010, 09:43 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