Quadrado exclusivo
Título:
Excluindo o Número Quadrado Xiao Ming está olhando para o número 203879 atordoado.
Acontece que 203879 * 203879 = 41566646641.
Qual é a mágica? Observe com atenção, 203879
é um número de 6 dígitos, e o número em cada dígito dele é diferente, e todos os dígitos depois dele ao quadrado não parecem formá-lo . Próprios números.
Existe outro número de 6 dígitos com essas características. Encontre-o!
Resposta: 639172
Analise de problemas
Enumeração violenta
O método de enumeração violenta é composto por seis dígitos em loop. De acordo com as condições, cada dígito dos seis dígitos é diferente e o número obtido pelo quadrado final não contém o seu próprio número. Verifique então esta condição.
Deve-se notar que o número obtido pela multiplicação de dois números de seis dígitos é muito grande, excedendo a faixa de int, então é melhor usar números longos longos para armazená-los para evitar erros. No futuro, você encontrará problemas semelhantes com números grandes. É mais seguro usar muito longo. Isso também é um julgamento sobre a faixa de valores.
Uma função útil é usada aqui para converter um inteiro em uma string
#include <iostream>
#include <sstream>
using namespace std;
//t2:排它平方数
//整数转成字符串
void i2s(long long x, string &basic_string){
stringstream ss;
ss << x;
ss >> basic_string;
}
//判断xx是否包含x中的数字
bool check(long long x, long long xx){
string s_x, s_xx;
i2s(x, s_x);
i2s(xx, s_xx);
for(int i = 0; i < s_x.length(); i++){
if(s_xx.find(s_x[i]) != string::npos){
return false;
}
}
return true;
}
int main(int argc, char** argv) {
for(int i = 1; i < 10; i++){
for(int j = 0; j < 10; j ++){
if(j != i){
for(int k = 0; k < 10; k++){
if(k != i && k != j){
for(int l = 0; l < 10; l ++){
if(l != i && l != j && l != k){
for(int h = 0; h < 10; h ++){
if( h != i && h != j && h != k && h != l){
for(int m = 0; m < 10; m ++){
if( m != h && m != i && m != j && m != k && m != l){
long long num = i*100000 + j*10000 + k*1000 + l*100 + h*10 + m;
if(check(num, num*num)){
cout << num << " " << num*num << endl;:
}
}
}
}
}
}}
}
}
}
}
}
return 0;
}
Nesta questão, embora ainda seja uma solução violenta, é impossível resolvê-la diretamente. Aí aproveita os cálculos do computador. Para este tipo de problema, esclareça o seu objetivo e escreva-o passo a passo de acordo com a ideia. O código não é difícil. Se for muito alto, você sempre poderá obter resultados.