Я пытаюсь научить себя C++, и я наткнулся на эту программу проекта в моей книге я работаю с:поклонника устранение
В древней земле, прекрасная принцесса Евы было много поклонников. Она решила следующую процедуру, чтобы определить, кто жених женится. Во-первых, все женихи будут выстраиваться один за другим и назначать номера.
Первым женихом будет номер 1, второе число 2 и т. Д. До последнего жениха, номер n. Начиная с первого жениха, она посчитала бы три жениха вниз по линии (из-за трех букв на ее имя), и третий жених был бы исключен из победы над своей рукой и удалился с линии. Ева продолжала бы, считая еще три жениха и устраняя каждого третьего жениха. Когда она дошла до конца линии, она продолжала считать с самого начала.
Например, если было шесть женихов тогда процесс ликвидации будет действовать следующим образом:
123456 первоначальный список женихов, начать отсчет с 1
12456 ухажера 3 устранен, продолжает отсчет от 4
1 245 ухажер 6 устранены, по-прежнему считая от 1
125 ухажера 4 устранено, продолжает отсчет от 5
15 ухажера 2 устранено, по-прежнему считая от 5
1 жениха 5 устранен, 1 является счастливым обладателем
Написать программу, которая использует вектор для определения, какое положение вы должны стоять, чтобы жениться на принцессе, если являются n женихами. Вы можете использовать следующую функцию из класса Vector:
v.erase (iter);
// Удаляет элемент в позиции ITER
Например, чтобы использовать эту функцию, чтобы удалить четвертый элемент с начала векторной переменной с именем theVector, использовать
theVector.erase (theVector.begin () + 3);
Номер 3 используется потому, что первый элемент в векторе находится в позиции с индексом 0.
Я написал некоторые предварительные код, но я с трудом выяснить, как сказать программе после первого suitor (т. е. третий жених) исключается, чтобы начать отсчет с четвертого жениха и т. д. Возможно, вложенная петля будет работать? Я нашел решения в Интернете, которые используют класс, но мне трудно понять, и я чувствую, что есть более простой способ решения этой проблемы, любая помощь будет очень признательна.
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n;
vector<int> vec;
cout << "Enter the number of suitors: " << endl;
cin >> n;
// set some values (from 1 to n)
for(int i = 0; i <= n; i++){
vec.push_back(i);
}
// erase third suitor
vec.erase(vec.begin()+2);
// print vector with erased suitor
for(unsigned i = 0; i <= vec.size(); i++){
cout << vec[i] << endl;
}
}
Думайте, «как далеко отсюда следующий». Если вы удалили кандидата с индексом 'x', следующий кандидат теперь находится в' x + 2' ('x + 3 - 1', он переместил один« шаг »). Чтобы безопасно «обернуть» вектор, читайте о модуле '%'. Вероятно, это обсуждается в той же главе, что и упражнение. – molbdnilo