编程挑战-高校俱乐部-分数表示法

题目详情

我们知道整数是可以用整数加分数的形式表示的,例如5=3+9562/4781=3+9712/4856=3+2956/1478=3+9172/4586=2+9762/3254等等

其中1~9只在前4种的整数部分和分子分母出现且只出现一次,我们求这样的式子的个数即test(x),其中65535>x>0,例如test(5)=4。

输入描述:

输入的第一行是一个整数N<10000,表示数据组数,接下来N行,每行包含一个正整数x。

输出描述:

对于每个x,输出test(x)。  

答题说明

输入样例:

3

5

123

321

样例输出:

4

3

7


思路:

1. 1-9全排列共有362880种可能,对每个排列进行分析,根据第一个加数不超过6位数,分子位数一定会大于分母进行分析(假设顺序为加数,分子,分母)

    并定义一个int数组 int a[65536]={0};


2.如1,2,3,4,5,6,7,8,9这种排列。可能存在情况为


 加数1,分子2345,分母6789 

 加数1,分子23456, 分母789 

 加数1 分子234567, 分母 89 

 加数1 分子2345678, 分母9

 加数12,分子3456, 分母789

 加数12,分子34567, 分母89

 加数12 ,分子345678, 分母9

 加数123,分子456, 分母789

 加数123,分子4567, 分母89

 加数123,分子45678, 分母9

 加数1234,分子567, 分母89

 加数1234,分子5678,分母9

 加数12345,分子67,分母89

 加数12345,分子678,分母9

 加数123456,分子78,分母9


加数用for(int i=0;i<6;i++)循环依次得出,然后再根据分子的位数要大于分母的位数,得出分子跟分母可能出现的值。

接着,用分子%分母,如果无余数,则sum=加数+分子/分母,判断其是否小于65535,小于,则a[sum]++;即发现了sum的一种组合。


3.使用头文件<algorithm>下的next_permutation函数,可以依次遍历全排列。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值