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

Đề tài: In ra phần tử có giá trị đối xứng

  1. #1
    Ngày gia nhập
    11 2012
    Bài viết
    2

    Mặc định In ra phần tử có giá trị đối xứng

    ĐỀ: nhập mảng và in ra phần tử có giá trị đối xứng
    Dưới đây là bài code của mình (Chỉ làm theo ý tưởng chưa hoàn thiện). Mong các bạn chỉ giúp mình, có sai chỗ nào chỉ dùm mình lun nhs
    Thanks nhiều!

    Code:
    //In ra phan tu co gia tri doi xung
    /*int main()
    {
        int A[100], B[100], n, i, a, dem = 0;
            printf("Nhap so phan tu mang: ");
            scanf("%d",&n);
            for(i = 0; i < n; i++)
                {
                    printf("Gia tri phan tu thu %d: ",i + 1);
                    scanf("%d",&A[i]);
                }
            do
            {
                for(i = 0; i < n; i++)
                {
                    a = A[i]%10;
                    A[i] = A[i]/10;
                    B[dem] = a;
                    dem++;
                }
                 //KT doi xung
                for(int j = 0; j < dem; j++)
                   {
                       if(B[j] == B[dem - j]) 
                        printf("%d",A[i]);
                   }
            }
            while (A[i]>0);

  2. #2
    Ngày gia nhập
    04 2012
    Bài viết
    42

    Bạn có thể nói ý tưởng của người đã chỉ dẫn bạn được không. vì code của bạn không đúng.
    C Code:
    1. while (!silly)
    2.     cout<<"Study everything !";

  3. #3
    Ngày gia nhập
    04 2010
    Nơi ở
    Binh Thanh, Hồ Chí Minh, Vietnam, Vietnam
    Bài viết
    504

    Trích dẫn Nguyên bản được gửi bởi kimlama Xem bài viết
    Bạn có thể nói ý tưởng của người đã chỉ dẫn bạn được không. vì code của bạn không đúng.
    Chuyển số thành mảng các số chữ số rồi kiểm tra mảng đối xứng. Cách này không được hay. :|

    Cách làm hay hơn như sau: Vì là số đối xứng, nên sau khi ta đảo ngược số lại thì cũng vẫn là số đó. Dựa vào tính chất này. Ta đảo ngược số đó lại, rồi lấy số ban đầu trừ cho số vừa đảo ngược. Nếu bằng 0, tức là đối xứng. Khác 0 là không đối xứng. VD1: 321 đão ngược ta được: 123, 321 - 123 = 198 != 0 => Số 321 không đối xứng. VD2: 656, đão ngược ta được: 656, 656 - 656 == 0 => số 656 đối xứng.


    C++ Code:
    1. bool isSymmetryNumber(int number) {
    2.     int _Tmp[2] = {number, 0};
    3.     while(_Tmp[0]) {
    4.         _Tmp[1] = _Tmp[1] * 10 + _Tmp[0] % 10;
    5.         _Tmp[0] /= 10;
    6.     }
    7.     return (number - _Tmp[1] == 0);
    8. }
    Đã được chỉnh sửa lần cuối bởi doicanhden : 27-11-2012 lúc 02:05 PM.
    Kết bạn với tôi <3
    Skype: giautm
    Facebook:
    https://fb.com/giautm.duongntt
    Email:
    giau.tmg@gmail.com

  4. #4
    Ngày gia nhập
    11 2012
    Bài viết
    2

    Ý tưởng của mình là lấy cái giá trị của một phần tử VD:1221 chia và lấy từng số để đưa vào một mảng mới sau đó sẽ kiểm tra sự đổi xứng của mảng này. Mình chỉ code theo ý tưởng đó thôi nên không biết đúng sai chỗ nào, có gì mấy bạn chỉ giúp.
    Cảm ơn ý tưởng của doicanhden

  5. #5
    Ngày gia nhập
    11 2012
    Bài viết
    136

    Trích dẫn Nguyên bản được gửi bởi ngoquochuy Xem bài viết
    Ý tưởng của mình là lấy cái giá trị của một phần tử VD:1221 chia và lấy từng số để đưa vào một mảng mới sau đó sẽ kiểm tra sự đổi xứng của mảng này. Mình chỉ code theo ý tưởng đó thôi nên không biết đúng sai chỗ nào, có gì mấy bạn chỉ giúp.
    Cảm ơn ý tưởng của doicanhden
    Nếu cứ theo ý tưởng mảng thì bạn chỉ cần so sánh 2 đầu của mảng số vừa lọc được với vòng lặp tới dem/2 là được để < dem thì lại đi so sánh lại thôi tốn kém hơn, và bạn nên phân tích xong rồi so sánh tính đối xứng như vậy bài sẽ dễ quản lý hơn là làm gộp. của bạn doicanhden hay quá ta. cái công thức hay.
    Giao lưu và học hỏi
    https://www.facebook.com/kimcy1992

  6. #6
    Ngày gia nhập
    02 2012
    Nơi ở
    everywhere
    Bài viết
    13

    Mặc định In ra phần tử có giá trị đối xứng

    Trích dẫn Nguyên bản được gửi bởi doicanhden Xem bài viết
    Chuyển số thành mảng các số chữ số rồi kiểm tra mảng đối xứng. Cách này không được hay. :|

    Cách làm hay hơn như sau: Vì là số đối xứng, nên sau khi ta đảo ngược số lại thì cũng vẫn là số đó. Dựa vào tính chất này. Ta đảo ngược số đó lại, rồi lấy số ban đầu trừ cho số vừa đảo ngược. Nếu bằng 0, tức là đối xứng. Khác 0 là không đối xứng. VD1: 321 đão ngược ta được: 123, 321 - 123 = 198 != 0 => Số 321 không đối xứng. VD2: 656, đão ngược ta được: 656, 656 - 656 == 0 => số 656 đối xứng.


    C++ Code:
    1. bool isSymmetryNumber(int number) {
    2.     int _Tmp[2] = {number, 0};
    3.     while(_Tmp[0]) {
    4.         _Tmp[1] = _Tmp[1] * 10 + _Tmp[0] % 10;
    5.         _Tmp[0] /= 10;
    6.     }
    7.     return (number - _Tmp[1] == 0);
    8. }
    đảo nc rồi đem trừ cách này nhanh đấy

  7. #7
    Ngày gia nhập
    04 2010
    Nơi ở
    Binh Thanh, Hồ Chí Minh, Vietnam, Vietnam
    Bài viết
    504

    Nó có khuyết điểm là chỉ dùng cho số nằm trong vùng biểu diễn của kiểu số nguyên. Lớn hơn nữa, vài chục chữ số là thua. Nếu làm theo cách này, ta còn có thể xử luôn cả số âm.
    C++ Code:
    1. #include <iostream>
    2. #include <vector>
    3.  
    4. bool isSymmetryNumber(uint64_t number) {
    5.     uint64_t Tmp[2] = {number, 0};
    6.     while(Tmp[0]) {
    7.         Tmp[1]  = Tmp[1] * 10 + Tmp[0] % 10;
    8.         Tmp[0] /= 10;
    9.     }
    10.     return (number - Tmp[1] == 0);
    11. }
    12.  
    13. int main()
    14. {
    15.     std::vector<uint64_t> arrSymmetryNumbers;
    16.  
    17.     size_t size = 0;
    18.     std::cout << "Nhap so phan tu mang: ";
    19.     std::cin >> size;
    20.     std::cin.ignore();
    21.  
    22.     uint64_t Tmp = 0;
    23.     for (size_t i = 0; i < size; ++i) {
    24.  
    25.         std::cout << "Nhap vao phan tu thu " << i + 1 << ": ";
    26.         std::cin >> Tmp;
    27.         std::cin.ignore();
    28.  
    29.         if(isSymmetryNumber(Tmp))
    30.             arrSymmetryNumbers.push_back(Tmp);
    31.     }
    32.  
    33.     if (arrSymmetryNumbers.empty())
    34.         std::cout << "Khong co so nao doi xung." << std::endl;
    35.     else {
    36.         std::cout << "Cac so doi xung la: " << std::endl;
    37.         for (auto number : arrSymmetryNumbers)
    38.             std::cout << number << std::endl;
    39.     }
    40.     std::cin.get();
    41.     return 0;
    42. }
    Đã được chỉnh sửa lần cuối bởi doicanhden : 28-11-2012 lúc 07:42 PM.
    Kết bạn với tôi <3
    Skype: giautm
    Facebook:
    https://fb.com/giautm.duongntt
    Email:
    giau.tmg@gmail.com

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

  1. Trả lời: 6
    Bài viết cuối: 31-07-2013, 07:51 PM
  2. Mỹ phẩm Thu Huyền: Bộ mỹ phẩm trị nám, tàn nhang Bride Korea - call 0906.260.160
    Gửi bởi kimkim8910 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: 12-03-2012, 10:49 PM
  3. phần merge module bị thiếu crystal report phải làm thế nào ?
    Gửi bởi manhluc88 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 06-01-2011, 01:11 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