求这道题的c++的代码。

菜枫 2018-12-03 11:48:31
一个数,各个位数上的数字都不相同称为美丽的,如5640,有重复数字的则不是,如11,100,给定区间1到100000,输入在做这一个区间里的一个小区间,然后输出这个小区间里有多少个数是美丽的,有运算复杂度要求,也就是算法必须简洁一点。求哪位大佬能做出来的,救救我吧。。
...全文
408 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
把数字转换成字符串,逐位检查,没有相同字符的就是美丽数。
这个够简洁不?没有数学运算.



shw014 2019-01-08
  • 打赏
  • 举报
回复
我好像错了
一位数 是 9 个
加起来是 9+9*9+9*9*8+9*9*8*7+9*9*8*7*6
=32490
shw014 2019-01-08
  • 打赏
  • 举报
回复
一位数 是 10 个
两位数 是 81个 (第一位从 1-9取, 第2位从 1-9 剩下的那个数 以及 0 中取 ) = 9*9
三位数是 648 个 (第一位从 1-9取, 第2位从 1-9 剩下的那个数 以及 0 中取,第三位从..)=9*9*8
四位数是 4536 个 =9*9*8*7
五位数是 27216 个 = 9*9*8*7*6
全部加起来是 32491
xdn1ce 2018-12-20
  • 打赏
  • 举报
回复
好像应该是从10开始乘
xdn1ce 2018-12-20
  • 打赏
  • 举报
回复
感觉是排列组合题。
num = 9*8*7*6*5+9*8*7*6+9*8*7+9*8+9
hongss 2018-12-05
  • 打赏
  • 举报
回复
这个有意思
  • 打赏
  • 举报
回复
这是娱乐代码,除非ACM、OJ之类的题追求尽可能少的代码量(RANK能往前排),工程应用中不应该这么写,这也是灵活性带来的副作用。
ooolinux 2018-12-03
  • 打赏
  • 举报
回复
引用 2 楼 早打大打打核战争 的回复:
要简洁的话:

int ibn(unsigned int n)
{
for (int r, m = 0; n; n /= 10)
if (r = n % 10, (m >> r) & 1 ? 1 : (m |= 1 << r, 0)) return 0;
return n == 0;
}


返回值1是美丽数,0不是美丽数,剩下的测试范围你自己写吧


老概的代码要细细看才会懂~
  • 打赏
  • 举报
回复
要简洁的话:

int ibn(unsigned int n)
{
for (int r, m = 0; n; n /= 10)
if (r = n % 10, (m >> r) & 1 ? 1 : (m |= 1 << r, 0)) return 0;
return n == 0;
}


返回值1是美丽数,0不是美丽数,剩下的测试范围你自己写吧
ooolinux 2018-12-03
  • 打赏
  • 举报
回复
因为最大的数是100000,不重复的最大数是98765,用一个最大5个元素的数组和一个表示总的位数的变量就可以了,都不用动态数组,效率也高些。
一个数%10得到个位,除于10去掉个位,不断地把得到的个位存入数组,有重复则退出,各个位都不重复就是美丽数了。

552

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 茶馆
社区管理员
  • 茶馆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧