Preguntas de la entrevista de desarrollo de prueba Tencent

Por desgracia, hoy entrevisté a un ingeniero de desarrollo de pruebas de Tencent y mi cara estaba hinchada. Bajé para buscar información y hablar sobre una pregunta de la entrevista.
Números, prefijos y matrices + la combinación de números con un resto de 3 para encontrar la Ley]

Por ejemplo, si solo se requiere que la cadena de 14533254 esté en tiempo O(N), solo puede atravesar un ciclo, y de acuerdo con la ley de los números que pueden ser divisibles por 3 aprendida en la escuela primaria, todos los números pueden ser divisibles. por 3. Así que usa esto para calcular.

La idea es sumar los dígitos a su vez para obtener una matriz, y luego la cadena anterior de 14533254, luego la matriz es {1,5,10,13,16,18,23,27}, y luego cada dígito corresponde a 3, se convierte en {1,2,1,1,1,0,2,0}; encuentra sum0 (el número con resto 0)=2, sum1 (el número con resto 1)=4, sum2 (el número cuyo resto es 2)=2, el resultado del cálculo es res=sum0+C(sum0,2)+C(sum1,2)+C(sum2,2); donde C(sum0,2) es una
combinación Problema numérico, tomemos C(sum1,2) como ejemplo para ilustrar
:

C(sum1,2) significa seleccionar al azar dos {1, 145, 1453, 14533} en el número de sum1, seleccione dos y elimine lo mismo de izquierda a derecha, la parte debajo del cuerpo debe ser divisible por 3; show de
código como a continuación:

#include<iostream>
#include<string>
#include<algorithm>

using namespace std;
int main()
{
	string str;
	while (cin >> str)
	{
		int len = str.length();
		
		int sum = 0;
		int sum0 = 0, sum1 = 0, sum2 = 0;
		for (int i = 0; i < len; i++)
		{
			sum += str[i] - '0';
			
			if (sum%3== 0)
				sum0++;
			else
				if (sum % 3 == 1)
					sum1++;
				else
					sum2++;
		}
		
		cout << "结果是:"<<sum0 + sum0 * (sum0 - 1) / 2 + sum1 * (sum1 - 1) / 2 + sum2 * (sum2 - 1) / 2 << endl;
	}
	return 0;
}

Referencia: https://www.cnblogs.com/zhazhaacmer/p/9441372.html

Supongo que te gusta

Origin blog.csdn.net/qq_41841073/article/details/82889982
Recomendado
Clasificación