2013-11-17 实验之带分数(优化穷举思想)
来源:互联网 发布:狂湿淘宝店 编辑:程序博客网 时间:2024/06/05 00:47
题目
标题:带分数
100 可以表示为带分数的形式:100 = 3 + 69258 / 714
还可以表示为:100 = 82 + 3546 / 197
注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。
类似这样的带分数,100 有 11 种表示法。
题目要求:
从标准输入读入一个正整数N (N<1000*1000)
程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。
思想
首先要对程序优化后穷举,如等于号的第一个数字必比输入的数下,接下来,穷举每一个数的优化思想,分子的位数必比分母的位数多。
程序的第二种思想是对剩余的数,进行全排列后比较,其实思想也是一样的,但是效率会更高,因为对针对的数来测试。
程序实现
#include<stdio.h>#include<stdlib.h>unsigned char flags[10];void init_flags(){int i;for(i = 0;i < 10; i++){flags[i] = 0;}flags[0] = 1;}int exec_is(){int i;for(i = 1;i < 10; i++){if(flags[i] == 0) {return 0;}}return 1;}int exec_count(){int count = 0;int i;for(i = 1;i < 10; i++){if(flags[i] == 0) {count++;}}return count;}int exec_first(int value){while(value > 0){int k = value %10;if(flags[k]){return 0;}else{flags[k] = 1;}value /= 10;}return 1;}void exec_operation(int value, int num){int m= 1; //m<n n=value*mint n;int m_bit = exec_count()/2+1;int temp = 1;int count=1;while(count<=m_bit){temp *=10;count++;}while(m< temp ){n = value * m;if(exec_first(m) && exec_first(n) && exec_is()){printf("%d = %d + %d / %d\n", num, num - value, n, m);}init_flags();exec_first(num - value);m++;}}int main(void){int num;scanf("%d", &num);int i;for(i = 1;i < num; i++){init_flags();if(exec_first(i)){exec_operation(num - i, num);}}return 0;}
- 2013-11-17 实验之带分数(优化穷举思想)
- 算法思想之穷举法
- 基本算法思想之穷举法(C++语言描述)
- 2013-11-04 实验之取球游戏(递推思想,数学归纳思想,思维逻辑思想)
- leetcode之穷举优化法
- 2013-11-13 实验之整数划分(递归求解思想,条件判断输出)
- 2013 带分数
- 2013-11-10 实验之剪格子游戏(数字分组思想)bug已消除版本见2013-11-24
- 不懂算法之带分数
- 蓝桥杯之带分数
- 蓝桥杯之带分数
- 常用算法思想--穷举算法
- 常用算法思想:穷举算法思想
- 思想实验(逻辑思维)解题
- 2013蓝桥杯初赛 带分数
- 蓝桥杯2013-java带分数
- 蓝桥2013 带分数
- 2013蓝桥杯 带分数
- 数组初始化
- SqlDataReader查询,更新,删除并保持和数据库实时操作(转)
- jQuery mouseover弹出title以及弹出大图的例子
- 跳转表实例(一)
- 大数据 取样
- 2013-11-17 实验之带分数(优化穷举思想)
- 图说Java —— 理解Java机制最受欢迎的8幅图
- linux 编辑器 中文乱码
- hdu2051
- ArrayAdapter和自己创建BaseAdapter用于ListView的示例
- POJ 2363 Blocks (ZOJ 1910) 数学
- 小收获
- java获取中国城市代码 中国城市ID
- AVL树