Можно ли как-то объединить последние 2 цикла в один?
ifstream F;
ofstream F1;
string name1,name2;
int n, k,i=0,j=0,tmp,x;
pt >> name1 >> name2;
F.open(name1.c_str(), ios::in);
F >> n >> k;
int* a = new int[n];
while (!F.eof() && i!=n) {
F >> a[i];
i++;
}
F.close();
F1.open(name2.c_str(), ios::out);
for (i = 0; i < n; i++) {
F1 << a[i] << " ";
}
F1 << endl;
F1 << "" << endl;
for (i = 0; i < n; i++) {
if (abs(a[i])%k==0) {
for (j = i; j < n; j++)
a[j] = a[j + 1];
n--; i--;
}
F1 << a[i] << " ";
}
for (i = 0; i < n; i++) {
if (a[i]==a[i+1]) {
for (j = i; j < n ; j++)
a[j] = a[j + 1];
n--; i--;
}
F1 << a[i] << " ";
}
F1.close();
Ответы (3 шт):
Автор решения: avkouzbar
→ Ссылка
Вам нужно объединить условия abs(a[i])%k==0) && (a[i]==a[i+1]) в рамках одного цикла.
Автор решения: Ilya Laptev
→ Ссылка
hg = 0; // Вначале это позиция, в которую отправляем оставшийся элемент.// Затем hg будет означать количество оставшихся после удаления элементов.
for (i = 0; i < n; i++){
if (!(abs(a[i]) % k == 0)) { // условие не на удаление элемента из массива, а на оставление (!!) его в массиве
a[hg] = a[i];
hg++;
}
}
for (i = 0; i < hg; i++)
F1 << a[i] << " ";
F1.close();
Автор решения: n1tr0xs
→ Ссылка
Да, можно. Вместо двух последних циклов можно написать такой один:
for (int i = 0; i < n; ++i) {
if ((!abs(a[i])%k) || (a[i]==a[i+1])) {
for (int j = i; j < n; ++j)
a[j] = a[j+1];
--n; --i;
}
F1 << a[i] << " ";
}