Code:
for(int i=1;i,n;i++)
{
for(int j=i+1;j<n;j++){ //vi j>i
float z=sqrt(i*i+j*j)
if((int)z==z)
//la ok
}
}
- Đoạn CODE ở trên ko đúng là sai ở chỗ nào bạn có thể chỉ cho mình đc ko?Đáng lẽ một bài đơn giản thế này chúng ta phải làm cho ra lẽ...
+ Thứ nhất: phần j = i + 1 thì đề nói là i<j<z<n đúng hok.Chẳng nhẽ ta lại cho j chạy từ 1 àh.Hóa ra có những giá trị mà i>j (sai giả thiết) => phí số lần lặp.
Mục đích tui cho j =i + 1 là để cho j luôn luôn lớn hơn i.
+ Nhưng đáng ra chỗ sai của tui thì bạn ko phát hiện ra nhỉ: ta nên thêm đều kiện là z<n trước khi in ra => rất sorry các bạn nhé.
Thêm nữa hình như Code bạn mới đưa lên,bạn đặt điều kiện lặp trong For sai rồi.nên chương trình của bạn ko thoát ra được...Và ta ko nên dùng so sánh
((i<j)&&(j<z) vì là thừa...nếu như sử dụng ý tưởng của bạn BuithiHa( do tui chế lại tí xíu) thì chúng ta ko cần hai phép so sánh đó.Xem CODE nhé...
Code:
#include<stdio.h>
main()
{
int n,i,j,z;
printf("\nn=");
scanf("%d",&n);
for(i=1;i<=n;i++) //Not 1<=n;
{
for(j=1;j<=n;j++)
{
float z=sqrt(i*i+j*j);
if((int)z==z)
if((i<j)&&(j<z)&&(z<=n)) //Not nessary if j = i + 1;
printf("%d %d %f\n",i,j,z);
}
}
}
- Tôi lun sẵn sàng tranh luận với bạn...mong bạn có ý kiến phản biện.Bài dễ nhưng làm cho hay lại là chuyện khác...Chúc bạn thành công!!!