P1996 Problema de Joseph (Logu)

Portal de título original

Inserte la descripción de la imagen aquí
Idea: Primero defina una matriz de enteros para representar n personas, y luego continúe atravesando la matriz. Los conteos que no han sido eliminados suman 1, y los conteos que son eliminados se asignan a -1 y el conteo se reinicia y el Las personas expulsadas aumentan en 1. Después de atravesar la matriz una vez, el recorrido comienza de nuevo hasta que el número de personas expulsadas es igual al número total de personas. Esta pregunta es sobre la lista vinculada en la estructura de datos. Estoy aquí para simular todo el proceso directamente, pero también se puede hacer con una lista vinculada.

Referencia de código

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 101;
int n,m,a[MAXN],num,t;//num用来计数,t代表已经被踢出的人数
int main()
{
    
    
    cin>>n>>m;
    //给数组赋值
	for(int i=1;i<=n;i++)
        a[i]=i;
    //遍历数组
	for(int i=1;;i++)
	{
    
    
	    //假如还没被踢出去,则计数+1
		if(a[i]!=-1)
            num++;
		if(num==m && a[i]!=-1)
		{
    
    
            cout<<a[i]<<" ";
            a[i]=-1;//被踢出后则元素重新赋值
            t++;
            num=0;//计数重新开始
		}
		//遍历完一次后重新开始
		if(i==n)
            i=0;
		if(t==n)
            break;
	}
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/Bertil/article/details/106795326
Recomendado
Clasificación