Trong đoạn mã sau, dòng lệnh t = t&& j%i nghĩa là gì, rất mong được chỉ giáo:
int avoidObstacles(std::vector<int> a) {
for(int i = 1; ;++i)
{
int t = 1;
for(int j:a)
t = t && j%i;
if(t)return i;
}
}
Trong đoạn mã sau, dòng lệnh t = t&& j%i nghĩa là gì, rất mong được chỉ giáo:
int avoidObstacles(std::vector<int> a) {
for(int i = 1; ;++i)
{
int t = 1;
for(int j:a)
t = t && j%i;
if(t)return i;
}
}
cái này mình không hiểu nhất là đoạn for(int j:a) ấy , còn t && j%i thì nó là một hàm logic, thì ở đây theo mình thấy thì nếu j chia hết cho i => j%i =0 => (t && j%i) sẽ trả ra 0 còn ngược lại j không chia hết cho i => (t && j%i) sẽ trả ra t
Mình đoán thế , bạn thử lại để xác nhận giúp mình nhé 
Khi nào tất cả các giá trị số nguyên trong vector<int> a chia lấy dư cho i được kết quả khác 0 thì sẽ trả về i.
Đó là cách viết gọn, đây là tường minh cho bạn dễ hiểu:
int avoidObstacles(std::vector<int> a) {
for(int i = 1; ;++i)
{
int t = 1;// true
for(int j:a){ // mỗi giá trị số j trong a
if(j%i==0){ // nếu j chia hết cho i
t = 0;// false
// break;
}
}
// false: tăng i và lặp tiếp
// true: trả về i
if(t)return i;
}
}
vector không phải bội số của i.Chắc trong vector không có số 0.
cảm ơn lời giải thích của bạn,
còn về for(int j:a) là cách duyệt tất cả các phần tử của vector a, tương đương for(int i=0; i<a.size();i++), khác biệt ở chỗ j là giá trị của phần tử chứ không phải vị trí của phần tử ( j = a[i] chứ không phải j = i)
cảm ơn bạn, có lẽ mình sẽ theo cách viết của bạn, có vẻ hơi dài nhưng mà dễ hiểu hơn nhiều
đây là bài viết mà mình đang xem, cách làm của mình tệ hơn nhiều nên mình rất ấn tượng với cách làm này, nó rất ngắn:
Đề bài: Một chú ếch xuất phát từ điểm 0 bật nhảy trên các lá sen xếp theo một hàng ngang cách đều nhau. Một số lá có chướng ngại vật trên đó. Tìm bước nhảy ngắn nhất khả dĩ để bật tránh các chướng ngại.
Tức là tìm số nhỏ nhất không chia hết bất kì số nào trong dãy.
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?