第 1 測資點(100%): RE (SIGSEGV)
執行時期錯誤記憶體區段錯誤!
第 1 測資點(100%): RE (SIGSEGV)
執行時期錯誤記憶體區段錯誤!
當你的 sum > c 的時候,不能提早break,因為輸入還是會繼續餵,你要讓他餵完m次才行
你提早 break 的話,剩下的輸入會被當成下一 round 的資料,就錯了
另外當sum == c 的時候,還是合法的,因為並沒有「超過」保險絲承受範圍
簡單來說,就把你的big填滿再sort就對
然後看big中最大的那個值有沒有超過c
以下是我稍微改的,盡量保留你本來的代碼 ^ ^
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n, m, c, i, time = 1;
while (cin >> n >> m >> c) {
if (n + m + c == 0) {
break;
}
int a[n], o[n], s, sum=0, big[m];
for (i = 0; i < n; i++) {
cin >> a[i];
o[i] = 0;
}
for (i = 0; i < m; i++) {
cin >> s;
o[s-1] = !o[s-1];
if (o[s-1] == 1) {
sum = sum + a[s-1];
}
else if (o[s-1] == 0) {
sum = sum - a[s-1];
}
big[i] = sum;
}
cout << "Sequence " << time << '\n';
time++;
sort(big,big+m);
int max = big[m - 1];
if (max <= c) {
cout << "Fuse was not blown.\n";
cout << "Maximal power consumption was " << max << " amperes.\n";
}
else if (sum > c) {
cout << "Fuse was blown.\n";
}
cout << '\n';
}
return 0;
}
第 1 測資點(100%): RE (SIGSEGV)
執行時期錯誤記憶體區段錯誤!
當你的 sum > c 的時候,不能提早break,因為輸入還是會繼續餵,你要讓他餵完m次才行
你提早 break 的話,剩下的輸入會被當成下一 round 的資料,就錯了
另外當sum == c 的時候,還是合法的,因為並沒有「超過」保險絲承受範圍
簡單來說,就把你的big填滿再sort就對
然後看big中最大的那個值有沒有超過c
以下是我稍微改的,盡量保留你本來的代碼 ^ ^
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n, m, c, i, time = 1;
while (cin >> n >> m >> c) {
if (n + m + c == 0) {
break;
}
int a[n], o[n], s, sum=0, big[m];
for (i = 0; i < n; i++) {
cin >> a[i];
o[i] = 0;
}
for (i = 0; i < m; i++) {
cin >> s;
o[s-1] = !o[s-1];
if (o[s-1] == 1) {
sum = sum + a[s-1];
}
else if (o[s-1] == 0) {
sum = sum - a[s-1];
}
big[i] = sum;
}
cout << "Sequence " << time << '\n';
time++;
sort(big,big+m);
int max = big[m - 1];
if (max <= c) {
cout << "Fuse was not blown.\n";
cout << "Maximal power consumption was " << max << " amperes.\n";
}
else if (max > c) {
cout << "Fuse was blown.\n";
}
cout << '\n';
}
return 0;
}
第 1 測資點(100%): RE (SIGSEGV)
執行時期錯誤記憶體區段錯誤!
當你的 sum > c 的時候,不能提早break,因為輸入還是會繼續餵,你要讓他餵完m次才行
你提早 break 的話,剩下的輸入會被當成下一 round 的資料,就錯了
另外當sum == c 的時候,還是合法的,因為並沒有「超過」保險絲承受範圍
簡單來說,就把你的big填滿再sort就對
然後看big中最大的那個值有沒有超過c
以下是我稍微改的,盡量保留你本來的代碼 ^ ^
#include
#include
using namespace std;
int main() {
int n, m, c, i, time = 1;
while (cin >> n >> m >> c) {
if (n + m + c == 0) {
break;
}
int a[n], o[n], s, sum=0, big[m];
for (i = 0; i < n; i++) {
cin >> a[i];
o[i] = 0;
}
for (i = 0; i < m; i++) {
cin >> s;
o[s-1] = !o[s-1];
if (o[s-1] == 1) {
sum = sum + a[s-1];
}
else if (o[s-1] == 0) {
sum = sum - a[s-1];
}
big[i] = sum;
}
cout << "Sequence " << time << '\n';
time++;
sort(big,big+m);
int max = big[m - 1];
if (max <= c) {
cout << "Fuse was not blown.\n";
cout << "Maximal power consumption was " << max << " amperes.\n";
}
else if (max > c) {
cout << "Fuse was blown.\n";
}
cout << '\n';
}
return 0;
}
感謝指教^_^!!