Bài tập  /  Bài đang cần trả lời

Viết chương trình nhập vào một mảng có N số nguyên (N≤100)..

Giải bằng lập trình C++
help mình đi mà!!
hứa 10đ
----- Nội dung dịch tự động từ ảnh -----
2. Viết chương trình nhập vào một mảng có N số nguyên (N≤100), hãy tìm:

a) Đoạn các số nguyên dương liên tiếp dài nhất, nếu có nhiều đoạn bằng nhau thì đưa ra đoạn đầu tiên tìm được.

b) Đoạn các số nguyên dương liên tiếp có tổng lớn nhất, nếu có nhiều đoạn có tổng bằng nhau thì đưa ra đoạn đầu tiên tìm được.

c) Đoạn liên tiếp có tổng lớn nhất, nếu có nhiều đoạn có tổng bằng nhau thì đưa ra đoạn đầu tiên tìm được.
0 Xem trả lời
Hỏi chi tiết
124
Tham khảo câu trả lời từ Trợ lý ảo Lazi
Dưới đây là chương trình bằng ngôn ngữ Python để thực hiện yêu cầu của đề bài. Chương trình này sẽ nhập vào một mảng số nguyên và tìm các đoạn liên tiếp theo các tiêu chí đã nêu.

```python
def find_longest_positive_segment(arr):
max_length = 0
current_length = 0
start_index = 0
result_segment = (0, 0) # (start_index, length)

for i in range(len(arr)):
if arr[i] > 0:
current_length += 1
else:
if current_length > max_length:
max_length = current_length
result_segment = (start_index, max_length)
current_length = 0
start_index = i + 1

# Check at the end of the array
if current_length > max_length:
result_segment = (start_index - current_length, current_length)

return arr[result_segment[0]:result_segment[0] + result_segment[1]]

def find_longest_segment_with_max_sum(arr):
max_sum = float('-inf')
current_sum = 0
current_start = 0
result_segment = (0, 0)

for i in range(len(arr)):
current_sum += arr[i]

if current_sum > max_sum:
max_sum = current_sum
result_segment = (current_start, i + 1)

if current_sum < 0:
current_sum = 0
current_start = i + 1

return arr[result_segment[0]:result_segment[1]]

def find_longest_segment_with_min_sum(arr):
min_sum = float('inf')
current_sum = 0
current_start = 0
result_segment = (0, 0)

for i in range(len(arr)):
current_sum += arr[i]

if current_sum < min_sum:
min_sum = current_sum
result_segment = (current_start, i + 1)

if current_sum > 0:
current_sum = 0
current_start = i + 1

return arr[result_segment[0]:result_segment[1]]

# Nhập dữ liệu từ người dùng
N = int(input("Nhập số phần tử của mảng (N ≤ 100): "))
if N > 100:
raise ValueError("N không được lớn hơn 100.")

arr = []
for i in range(N):
num = int(input(f"Nhập số thứ {i + 1}: "))
arr.append(num)

# Tìm đoạn các số nguyên dương liên tiếp dài nhất
longest_positive_segment = find_longest_positive_segment(arr)
print("Đoạn số nguyên dương liên tiếp dài nhất:", longest_positive_segment)

# Tìm đoạn có tổng lớn nhất
max_sum_segment = find_longest_segment_with_max_sum(arr)
print("Đoạn có tổng lớn nhất:", max_sum_segment)

# Tìm đoạn có tổng nhỏ nhất
min_sum_segment = find_longest_segment_with_min_sum(arr)
print("Đoạn có tổng nhỏ nhất:", min_sum_segment)
```

### Giải thích chương trình:
1. **Nhập dữ liệu**: Chương trình yêu cầu người dùng nhập số phần tử và giá trị cho từng phần tử của mảng.
2. **Tìm đoạn số nguyên dương dài nhất**: Hàm `find_longest_positive_segment` lặp qua mảng và kiểm tra độ dài của các đoạn số dương.
3. **Tìm đoạn có tổng lớn nhất**: Hàm `find_longest_segment_with_max_sum` sử dụng phương pháp tương tự để tìm đoạn có tổng lớn nhất.
4. **Tìm đoạn có tổng nhỏ nhất**: Hàm `find_longest_segment_with_min_sum` tương tự như trên nhưng tìm đoạn có tổng nhỏ nhất.
5. **Xuất kết quả**: Kết quả được in ra màn hình cho từng yêu cầu.

Bạn hỏi - Lazi trả lời

Bạn muốn biết điều gì?

GỬI CÂU HỎI
Học tập không giới hạn cùng học sinh cả nước và AI, sôi động, tích cực, trải nghiệm

Hôm nay bạn thế nào? Hãy nhấp vào một lựa chọn, nếu may mắn bạn sẽ được tặng 50.000 xu từ Lazi

Vui Buồn Bình thường
×
Trợ lý ảo Trợ lý ảo
×
Đấu trường tri thức | Lazi Quiz Challenge +500k
Gửi câu hỏi
×