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.
ĐỀ: 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);
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:
while (!silly) cout<<"Study everything !";
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:
bool isSymmetryNumber(int number) { int _Tmp[2] = {number, 0}; while(_Tmp[0]) { _Tmp[1] = _Tmp[1] * 10 + _Tmp[0] % 10; _Tmp[0] /= 10; } return (number - _Tmp[1] == 0); }
Đã đượ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
Ý 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
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:
#include <iostream> #include <vector> bool isSymmetryNumber(uint64_t number) { uint64_t Tmp[2] = {number, 0}; while(Tmp[0]) { Tmp[1] = Tmp[1] * 10 + Tmp[0] % 10; Tmp[0] /= 10; } return (number - Tmp[1] == 0); } int main() { std::vector<uint64_t> arrSymmetryNumbers; size_t size = 0; uint64_t Tmp = 0; for (size_t i = 0; i < size; ++i) { if(isSymmetryNumber(Tmp)) arrSymmetryNumbers.push_back(Tmp); } if (arrSymmetryNumbers.empty()) else { for (auto number : arrSymmetryNumbers) } return 0; }
Đã đượ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