您的位置:首页 > 其它

蓝桥杯之奇妙的数字

2018-02-27 16:45 246 查看

问题描述:

奇妙的数字小明发现了一个奇妙的数字。它的平方和立方正好把0~9的10个数字每个用且只用了一次。 
你能猜出这个数字是多少吗?请填写该数字,不要填写任何多余的内容。暴力搜索,不过需要优化一下判断条件,找到不同的数字则标记数组对应的项(10个数对应10个位置)+1,判断最后是否每一项只为1,否则重置标记数组为0。#include <iostream>
#include <cstring>
#include <sstream>

using namespace std;

int a[10] = {0};

bool Check1(char c[])
{
for(int i = 0;i<10;i++)
{
if(c[i] == '0')
a[0]++;
if(c[i] == '1')
a[1]++;
if(c[i] == '2')
a[2]++;
if(c[i] == '3')
a[3]++;
if(c[i] == '4')
a[4]++;
if(c[i] == '5')
a[5]++;
if(c[i] == '6')
a[6]++;
if(c[i] == '7')
a[7]++;
if(c[i] == '8')
a[8]++;
if(c[i] == '9')
a[9]++;
}
for(int i = 0;i<10;i++)
{
if(a[i] != 1)
{
for(int i = 0;i<10;i++)
a[i] = 0;
return false;
}

}
return true;
}

bool Check(int k1,int k2)
{
stringstream s;
s<<k1;
stringstream ss;
ss<<k2;
string a = s.str();
string b = ss.str();
string c = a+b;
if(c.length() != 10)
return true;
else
{
char d[10];
strncpy(d,c.c_str(),c.length());
if(Check1(d))
return false;
else
return true;
}
}

int main()
{
int i = 0;
long long int k1,k2;
bool test = true;
while(test)
{
i++;
k1 = i*i;
k2 = k1*i;
test = Check(k1,k2);
}
cout<<i;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: