ZCMU-1842-带分数
来源:互联网 发布:维也纳工业大学 知乎 编辑:程序博客网 时间:2024/04/29 04:25
1842: 带分数
Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 8 Solved: 2
[Submit][Status][Web Board]
Description
100 可以表示为带分数的形式:100 = 3 + 69258 / 714。 还可以表示为:100 = 82 + 3546 / 197。 注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。 类似这样的带分数,100有 11 种表示法。
Input
从标准输入读入一个正整数N (N< 1000*1000)
Output
程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。 注意:不要求输出每个表示,只统计有多少表示法!
Sample Input
100
105
Sample Output
11
6
【解析】
这道题其实刚开始想的时候真的没什么思路..不过好像可以进行全排列的来,这个形式就是整数+分数,而分数是可以
整除的,所以我们在全排列的时候安排前面的整数最大是7位数,因为后面最少最少也需要1位除1位,而被除数最少肯
定也需要一位。所以j的范围是的7,i的范围是到1.这样我们做个预处理之后直接查询就可以了。
#include<cstdio>#include<iostream>#include<algorithm>using namespace std;int b[1000100];int main(){ int a[9]={1,2,3,4,5,6,7,8,9}; int i,j,k,n,m,p,sum; do//每次排列都做一次 { for(i=0;i<=6;i++)//表示i最大可以到7位 { for(j=i+1;j<=7;j++)//j最大是7-i-1 { n=0; m=0; p=0; for(k=0;k<=i;k++) { n=n*10+a[k]; } for(k=i+1;k<=j;k++) { m=m*10+a[k]; } for(k=j+1;k<=8;k++) { p=p*10+a[k]; } if(m%p==0)//表示如果后面的分数可以整除 { sum=n+m/p; if(sum<1000000)//因为数据范围就是在1000*1000当中 b[sum]++; } } } } while(next_permutation(a,a+9)); scanf("%d",&n); printf("%d\n",b[n]); return 0;}
0 0
- ZCMU-1842-带分数
- 带分数
- 带分数
- 带分数
- 带分数
- 带分数
- 带分数
- 带分数
- 带分数
- 带分数
- 带分数
- 带分数
- 带分数
- 带分数
- 带分数
- 带分数
- 带分数
- 带分数
- HDU 5996 dingyeye loves stone
- Java进阶之路——从初级程序员到架构师,从小工到专家(转载)
- Linux与Windows串口通信
- PHP Fatal error: include(): unable to unlock pthread lock in
- JAVA之键盘输入取最小数字
- ZCMU-1842-带分数
- 小游戏之扫雷的实现
- 如何制作USB管理软件
- Git常用命令
- 无法定位程序输入点 _Z21qRegisterResourceDataiPKhS0_S0_
- opencart 3.0.0.0及mycncart2.0.0.0的重大改进之模板后台编辑
- CentOS 7 下的软件安装方法及策略
- PAT(甲级)A+B for Polynomials
- 系统按键:Home键和最近任务键的监听器简单封装