| 
 | 
 
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;
 
 -         }
 
 - }
 
  复制代码 
 
 
 |   
 
 
 
 
 
 |