30/09/2018, 18:19
Tìm số đẹp thứ n, với định nghĩa số đẹp là số tổng các chữ số của nó chia hết cho số chữ số
Đề là : Một số nguyên dương được gọi là số đẹp nếu tổng các chữ số của nó (trong hệ thập phân). chia hết cho số chữ số. Ví dụ, 15 là một số đẹp vì 1+5 chia hết cho 2.
Yêu cầu: Cho số nguyên dương n(n<=10^6). Hãy tìm số đẹp thứ n.
Dữ liệu: nhập từ bàn phím nguyên dương .
Kết quả: xuất ra màn hình số đẹp thứ n.
Code của mình:
int main()
{
unsigned long long n, a[1000000], c=1, b[1000000], i=1;
cin >> n;
while (n+1==c)
{
unsigned long long m=i, s=0, q=1;
while (m!=0)
{
b[q]=m%10;
s+=b[q];
m/=10;
q++;
i++;
}
if (s%(q-1)==0)
{
a[c]=i;
c++;
}
}
cout << a[c-1];
return 0;
}
Mình cám ơn trước ạ <3
Bài liên quan
=> có thể bị lỗi bộ nhớ. Là bài toán đếm đến khi đạt y.c thì xuất đáp án, không cần lưu kq trước đó
Bạn đã học về hàm chưa, nếu rồi thì dùng hàm để code bài này, với lại tên biến của bạn tối nghĩa quá, thêm chút comment người khác đọc code sẽ dễ hơn.
Bài này dùng cấp phát động nhé vì mảng trong C/C++ chỉ nên để kích thước tối đa là 10000 thôi, nếu k sẽ bị tràn bộ nhớ đệm (buffer overflow)
Mính sửa vầy đúng ko bạn?
Nhưng nó cứ lỗi ở đâu đó ý
Dùng hàm nào bạn? Cáo phát động thì mình chưa học
Mình ko biết về C++ nhưng mình đóng góp một tý về cách viết .
Theo điều 1 bạn nói chắc là hàm bool nhưng phải cho nó kiểm tra từ đâu tới đâu?
Chắc phải cho chạy từ 1 đến 10^6 luôn
mình sợ nó cũng bị lỗi tại như bạn @vietha1996 nói mảng có kích thước tối đa 10000 thôi
Xin lỗi bạn, mình có đọc reply từ chiều xong đi học, tới lúc về thì quên mất.
Ý mình là bạn dùng hàm để kiểm tra các điều kiện của đề bài ấy chứ bạn cho tất vào hàm main() cộng thêm các biến c, i, m, s … rất khó hiểu.
Cấp phát động thì bạn có thể tìm trên google, chỉ vài dòng thôi. Bài này bạn không cần dùng mảng để lưu cũng được.
Ý tưởng bác @Hnib nói hoàn toàn đúng ạ, mình xin phép triển khai.
Mình code lại toàn bộ, ý tưởng giống với bác @Hnib.
Bạn chịu khó đọc kĩ sẽ hiểu, mình test thử n = 10^6 vẫn ra kq nhé : 6806035, quá bé so với long long
hehe bạn bài thì mình hiểu rồi và đã test, rất chính xác. Nhưng bạn xem dùm mình bài này mình lỗi đâu ý mà ra sai kết quả
Bạn truyền tham số n vào trong hàm sodep() mà trong hàm không đụng gì tới nó cả.
Cũng trong hàm này, bạn gán m = so mà so = 1 -> m = 1, như thế những gì trong while chỉ thực hiện đúng 1 lần, dẫn tới sophantu = 2, so = 2. Kiểm tra tới if thấy s % (sophantu - 1) luôn = 0.
Hàm sodep() của bạn luôn True, vào main bạn gọi sodep(i) nó sẽ ra luôn i cho bạn.
Mình cop nguyên đống trên mà quên sửa :)) Sửa vầy nó vẫn sao sao hỷ?