|
1鱼币
我的疑问
程序的输出结果是一个 "哈哈", 证明 quareNumber() 函数返回了true, 但是在返回前还有一句cout语句却没有执行!
题目如下
由0~9这10个数字不重复、不遗漏,可以组成很多10位数字。
这其中也有很多恰好是平方数(是某个数的平方)。
比如:1026753849,就是其中最小的一个平方数。
请你找出其中最大的一个平方数是多少?
注意:你需要提交的是一个10位数字,不要填写任何多余内容。
代码如下
- #include <iostream>
- #include <math.h>
- #include <stdlib.h>
- using namespace std;
- // 检查是否存在重复的元素
- bool repeat(int* array,int end)
- {
- int num[10] = {0};
- for(int i = 0; i < end; i++)
- {
- num[array[i]] += 1;
- }
- for(int i = 0; i < 10; i++)
- {
- if(num[i] > 1) return true;
- }
- return false;
- }
- // 检查是不是平方数
- bool quareNumber(int* array)
- {
- long long sum = 0;
- for(int i = 9; i >= 0; i--)
- {
- sum += array[i];
- sum *= 10;
- }
- // 首先开方, 如果开方后的结果是个小数, 则这个数不是平方数
- double a = sqrt(sum);
- if(a == (int)a)
- {
- cout<< a<< ":"<< sum;
- return true;
- }
- else false;
- }
- // array用来储存0-9的全排列
- void dfs(int* array, int pos)
- {
- if(pos == 10)
- {
- if(quareNumber(array))
- {
- cout<< "哈哈";
- exit(0);
- }
- }
- for(int i = 9; i >= 0; i--)
- {
- // 第一个数不能为0
- if(pos == 0 && i == 0) continue;
- // array中不能有重复的数字
- if(repeat(array, pos)) continue;
- array[pos] = i;
- dfs(array, pos+1);
- }
- }
- int main(int argc, char* argv[])
- {
- int i[10];
- dfs(i, 0);
- return 0;
- }
复制代码
执行结果
哈哈
--------------------------------
Process exited with return value 0
Press any key to continue . . .
请查看代码注释:
- // 检查是不是平方数
- bool quareNumber(int* array)
- {
- long long sum = 0;
- for(int i = 9; i >= 0; i--)
- {
- sum += array[i];
- sum *= 10;
- }
- // 首先开方, 如果开方后的结果是个小数, 则这个数不是平方数
- double a = sqrt(sum);
- if(a == (int)a)
- {
- cout<< a<< ":"<< sum;
- return true;
- }
- //else false; //修改为如下:
- else
- {
- return false;
- }
- }
复制代码
|
|