鱼C论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 140|回复: 1

[平方十位数] 问题

[复制链接]
最佳答案
0 
发表于 2019-1-28 22:02:09 | 显示全部楼层 |阅读模式
1鱼币
我的疑问

程序的输出结果是一个 "哈哈", 证明  quareNumber() 函数返回了true, 但是在返回前还有一句cout语句却没有执行!

题目如下

由0~9这10个数字不重复、不遗漏,可以组成很多10位数字。
这其中也有很多恰好是平方数(是某个数的平方)。

比如:1026753849,就是其中最小的一个平方数。

请你找出其中最大的一个平方数是多少?

注意:你需要提交的是一个10位数字,不要填写任何多余内容。

代码如下


  1. #include <iostream>
  2. #include <math.h>
  3. #include <stdlib.h>

  4. using namespace std;

  5. // 检查是否存在重复的元素
  6. bool repeat(int* array,int end)
  7. {
  8.         int num[10] = {0};
  9.         for(int i = 0; i < end; i++)
  10.         {
  11.                 num[array[i]] += 1;
  12.         }
  13.         for(int i = 0; i < 10; i++)
  14.         {
  15.                 if(num[i] > 1) return true;
  16.         }
  17.         return false;
  18. }
  19. // 检查是不是平方数
  20. bool quareNumber(int* array)
  21. {
  22.         long long sum = 0;
  23.         for(int i = 9; i >= 0; i--)
  24.         {
  25.                 sum += array[i];
  26.                 sum *= 10;
  27.         }
  28.         // 首先开方, 如果开方后的结果是个小数, 则这个数不是平方数
  29.         double a = sqrt(sum);
  30.         if(a == (int)a)
  31.         {
  32.                 cout<< a<< ":"<< sum;
  33.                 return true;
  34.         }
  35.         else false;
  36. }
  37. // array用来储存0-9的全排列
  38. void dfs(int* array, int pos)
  39. {
  40.         if(pos == 10)
  41.         {
  42.                 if(quareNumber(array))
  43.                 {
  44.                         cout<< "哈哈";
  45.                         exit(0);
  46.                 }
  47.         }
  48.         for(int i = 9; i >= 0; i--)
  49.         {
  50.                 // 第一个数不能为0
  51.                 if(pos == 0 && i == 0) continue;
  52.                 // array中不能有重复的数字
  53.                 if(repeat(array, pos)) continue;
  54.                 array[pos] = i;
  55.                 dfs(array, pos+1);
  56.         }
  57. }

  58. int main(int argc, char* argv[])
  59. {
  60.         int i[10];
  61.         dfs(i, 0);
  62.         return 0;
  63. }
复制代码

执行结果

哈哈
--------------------------------
Process exited with return value 0
Press any key to continue . . .

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
67 
发表于 2019-1-28 22:23:12 | 显示全部楼层
请查看代码注释:
  1. // 检查是不是平方数
  2. bool quareNumber(int* array)
  3. {
  4.         long long sum = 0;
  5.         for(int i = 9; i >= 0; i--)
  6.         {
  7.                 sum += array[i];
  8.                 sum *= 10;
  9.         }
  10.         // 首先开方, 如果开方后的结果是个小数, 则这个数不是平方数
  11.         double a = sqrt(sum);
  12.         if(a == (int)a)
  13.         {
  14.                 cout<< a<< ":"<< sum;
  15.                 return true;
  16.         }
  17.         //else false;  //修改为如下:
  18.         else
  19.         {
  20.                 return false;
  21.         }
  22. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小甲鱼新书上市,限量优惠(微信扫一扫)^_^

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号

GMT+8, 2019-4-21 14:32

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表