01/10/2018, 17:35
Hai đoạn code khác nhau chỗ nào?
Mọi người cho em hỏi hai đoạn code khác nhau chỗ nào ạ, đoạn 1 chạy được còn đoạn 2 thì không ạ. (In ra hoán vị của n chữ số đầu tiên)
#include<iostream>
using namespace std;
int a[10], dd[10]={0}, n;
void xuat(){
for(int i=1; i<=n; i++)
cout<<a[i];
cout<<endl;
}
void backtrack(int i){
if(i>n) xuat();
for(int j=1; j<=n; j++){
if(dd[j]==0){
dd[j]=1;
a[i]=j;
backtrack(i+1);
dd[j]=0;
}
}
}
int main(){
cin>>n;
backtrack(1);
return 0;
}
Đoạn 2:
#include<iostream>
using namespace std;
int a[10], dd[10]={1}, n;
void xuat(){
for(int i=1; i<=n; i++)
cout<<a[i];
cout<<endl;
}
void backtrack(int i){
if(i>n) xuat();
for(int j=1; j<=n; j++){
if(dd[j]==1){
dd[j]=0;
a[i]=j;
backtrack(i+1);
dd[j]=1;
}
}
}
int main(){
cin>>n;
backtrack(1);
return 0;
}
Bài liên quan
Theo đúng nghĩa khác nhau chỗ nào:
Tại sao khác?
Vì 1 đoạn sẽ sai logic, 1 đoạn thì không2 đoạn sai tuốt, tại compiler nên người code tưởng là 2 đoạn code này khác nhau, thực tế là khôngCụ thể là sao ạ? Em chưa hiểu lắm.
Dọn nội dung nhầm nhọt
2 code đều chạy được, có điều code 1 ra kết quả còn code 2 thì không.
Đáng ra 2 code này phải không chạy mới đúng. Mấu chốt nằm ở đoạn
Dòng này chỉ gán
dd[0]
bằng 1 giá trị bất kì thôi, còn những phần tử còn lại không được khởi tạo giá trị, giá trị của chúng sẽ là giá trị rác. Như vậy thì đoạn codeif (dd[j] == ...)
sẽ không hoạt động, vì có bao giờ dd[j] bằng được giá trị ở bên phải đâu :vKiểm chứng:
2 code (đã thêm đoạn in
dd[]
):Code 1: https://ideone.com/vEU8e8 (ideone mặc định biến chưa khởi tạo có giá trị bằng 0, nhưng đổi sang 1 IDE khác sẽ cho kết quả toàn rác)
Code 2: https://ideone.com/JsmNsw (phần tử đầu tiên = 1, còn những phần tử còn lại không phải 1)
Để fill hết 1 giá trị, dùng
std::fill
.Đối với mảng tĩnh:
Dạ, em cảm ơn nhiều ạ. Cho em hỏi luôn ạ, trong mấy đoạn code nhiều khi em thấy có std::cin gì đó. Nó có gì khác với cin bình thường ạ?
cin
làstd::cin
thôi.http://www.cplusplus.com/reference/iostream/cin/
Vậy là hai cái nó giống nhau ạ? Vậy thêm std:: vào với mục đích gì ạ?
Namespace là để cách ly mấy cái tên ra, nên mình
using
nguyên 1 namespace (thường làstd
!) là rất chuối. Vì vậy ta phải viết thêm tên namespace vào mới đầy đủ.