El puente azul Copa de las preguntas anteriores preguntas número mixto

El puente azul Copa de las preguntas anteriores preguntas número mixto

Descripción del problema
100 puede ser representado en forma de fracciones mixtas: 69 258 + 3 = 100/714.

También se puede expresar como: 82 + 100 = 3546/197.

Nota en la que: una fracción mixta, los números 1 a 9 aparece una vez y sólo una vez, respectivamente (no incluyendo 0).

fracción mixta de este tipo, hay 11 100 notación.

Formato de entrada
de la entrada estándar un número entero positivo N (N <1000 * 1000)

Formato de salida de
programa de la salida digital por un convertidor digital 1 ~ 9 no se repetirá sin fracción mixta omisión consistente en todo el número de especies representadas.

Nota: no requiere la salida de cada dijo que sólo estadísticas sobre la representación de los números!

Ejemplo de entrada 1
100

Ejemplo de salida 1
11

Ejemplo de entrada 2
105

Ejemplo de salida 2
. 6

análisis Rough:
La idea es sujeto 1 a 9 para una gama completa, entonces el '+' y '\' insertado en el mismo, y luego determina si la fórmula de cálculo en establecido, si fuere establecido, ya que el recuento más uno.
El análisis detallado:
Ejemplo:
_1_2_3_4_5_6_7_8_9, el '+' y '\' se insertan en subrayado, ya que la entrada de datos N <1,000 * 1,000, por lo tanto, '+' se puede insertar dentro de un rango que el segundo subrayado a 6 subrayado entre (incluyendo los dos puntos), y '/' en frente de un cierto número de dígitos igual al número de dígitos es mayor que el último, o, detrás del resultado de la división es 0!
Y entonces pensamos, de hecho, como una cadena de números, como el corte, corte en tres secciones, la primera cuchilla de corte sólo tenemos que entre la primera y la sexta, a continuación, una cadena en una digital, se encuentran una se establece fórmula.
Aquí, tenemos que abordar las siguientes cuestiones:

  1. gama completa
  2. La cadena de caracteres parcial en digitales

Para la resolución de problemas

  1. Todo el arreglo puede :: next_permutation (str.begin (), str.end ()) para resolver este problema mediante la función en el std C ++ algoritmo.
  2. Para cadena-a-digital, esto es relativamente simple, pero la cadena es el primer I i, j entre el carácter en un digital (ambos inclusive), la clase no es un parámetro cadena que se pasa a la conversión digital, de lo contrario en la adición de unos tomadas (aunque las respectivas funciones) para la porción de la cadena

Aquí está mi código

#include <iostream>
using namespace std;
#include <string>
#include <vector>
#include <algorithm>
string str = "123456789";//1~9个数字
int Exchange(int i, int j)//将str中第i, j之间的字符转化为数字(包括两端点)
{
	int number = 0;
	for (; i <= j ; i++)
	{
		number = number * 10 + str[i] - '0';
	}
	return number;
}
int main()
{
	int i, j, k, num, sum = 0;
	int a, b, c;
	cin >> num;
	while (next_permutation(str.begin(), str.end()))//全排列
	{
		for (i = 0 ; i <= 4 ; i++)//第一刀的选取
		{
			a = Exchange(0, i);
			for (j = (8 - i) / 2 + i ; j < 8 ; j++)//第二刀的选取
			{
				b = Exchange(i + 1, j);
				c = Exchange(j + 1, 8);
				if (num == a + b / c && b % c == 0)//限制条件,不要忘了b % c == 0,不然b / c 同意也会得到一个值,但不满足题意
				{
					sum++;
				}
			}
			
		}
	}
	cout << sum << endl;
	return 0;
}

Si mal, señalan problemas! Gracias!

Publicado 13 artículos originales · ganado elogios 5 · Vistas 487

Supongo que te gusta

Origin blog.csdn.net/qq_44410340/article/details/104930263
Recomendado
Clasificación