Escrito por Josefo STL sólo el aprendizaje

Se acaba de enterar de C ++ STL, por la que atraviesa el vector de los elementos que fueron removidos, aplicación de escritura Josefo

Primer título y pegatinas de código, y luego poco a poco el análisis

título Descripción

Descriptionn niño que se sienta en un círculo, pulse las agujas del reloj contados 1,2, ..., n, el número p de la cantidad de paquetes secuencialmente en los niños agujas del reloj, el informe 1 m, cuando el informe m, el niño fuera del círculo y luego el siguiente mensaje de un número y, a continuación, se apaga cuando el informe m. Así que de nuevo, hasta que todos los niños están fuera del círculo. Presione hacia fuera el número de niños de salida orden.
Las líneas de entrada son cada uno un número entero de tres separados por espacios, el primero es n, el segundo es p, la tercera es m (0 <m, n < 300). La última línea es:

0 0 0
la salida el número de secuencia del círculo de salida, el intervalo entre una coma número

La entrada de la Muestra
8 4 3
0 0 0
la muestrear la salida
6,2,7,4,3,5,1,8
código de error (a estudiar aún más las razones equivocadas)

#include<vector>
#include<iostream>
using namespace std;
int main() {

 int I = 1;//信标
 vector<int>v;
 int n, m;
 cin >> n >> m;
 for (int i = 0; i <= n; i++) {
  v.push_back(i);//把环做出来,0是为了占用一个空间,以便于size运算不加一
 }
 cout << "被删除的元素是: " << v[I] << endl;//调试
  v.erase(v.begin() + I);
 }
 cout << "The last one is " << v[1] << endl;
 return 0;

código AC es la siguiente

#include<vector>
#include<iostream>
#include<cstdio>
using namespace std;
int main() {
	int I ;//信标
	vector<int>v;
	int n, m;
	while (cin >> n >> I >> m) {
		if (n == m && m == I && m == 0)
			break;
		for (int i = 0; i <= n; i++) {
			v.push_back(i);//用0堵住0号元素
		}
		int N = n;
		while (N--) {//删除n个元素
			int i;
			int temp = v.size() - 1;//时刻在变
			//cout << "temp:" << temp << endl;
			I %= temp;//完善一下,保证I的取值是【1,temp】
			if (!I)
				I = temp;
			for (i = 0; i < (m - 1); i++) {//如果起点不是1,这里还是需要完善
				I++;
				if (I > temp) {
					I -= temp;
				}
			}
			/*cout << "当前的I值为" << I << endl;
			cout << "当前size为" << v.size() << endl;
			cout << "被删除的元素是: " << v[I] << endl;*/
			if (v.size() - 1 == n)
				cout << v[I];
			else
				cout << "," << v[I];
			v.erase(v.begin() + I);
		}
		cout << endl;
		v.clear();
	}
	return 0;

}
Publicó un artículo original · ganado elogios 0 · Vistas 21

Supongo que te gusta

Origin blog.csdn.net/sdibt_xhx/article/details/104737754
Recomendado
Clasificación