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:
- gama completa
- La cadena de caracteres parcial en digitales
Para la resolución de problemas
- Todo el arreglo puede :: next_permutation (str.begin (), str.end ()) para resolver este problema mediante la función en el std C ++ algoritmo.
- 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!