圈乘运算问题
来源:互联网 发布:安装linux分区详解 编辑:程序博客网 时间:2024/04/29 18:03
#include "iostream"#include "algorithm"#include "cmath"#include "fstream"using namespace std;#define INF 100000/*求X和圈乘运算组成的值为K的表达式最少需要多少个圈乘运算 m为X的位数,圈乘运算表达式最大值不超过 L = (9*m)*9 + 9,当m=1时,不超过171 m = lg(X+1) 向上取整 s[L][4]存储各数字信息 s[i][0] 存储i所需最少圈乘运算次数,s[i][1]存储sum(i),s[i][2]存储max(i),s[i][3]存储min(i) s[0][0]、s[0][1]、s[0][2]、s[0][3]分别存储X信息 s[K][0]为结果*/int **s;int X, K, L;void count(int num[], int i){ int t; int max = 0; int min = 10; int sum = 0; while(i) { t = i % 10; if(t > max) max = t; if(t < min) min = t; sum += t; i /= 10; } num[1] = sum; num[2] = max; num[3] = min;}void init(){ int m = ceil(log(X+1)/log(10.0)); L = 81 * m + 9; if(L < 171) L = 171; s = new int*[L+1]; for(int i=0; i<=L; i++) s[i] = new int[4]; for(i=1; i<=L; i++) { s[i][0] = INF; //圈乘运算最少次数 s[i][1] = 0; //sum(i) s[i][2] = 0; //max(i) s[i][3] = INF; //min(i) } for(i=1; i<=L; i++) //计算s[i][4]中的信息 count(s[i], i); s[0][0] = 0; count(s[0], X);}int dyna(){ init(); if(X == K) return 0; if(K > L) return -1; bool flag = true; while(flag) //最优值不再更新时退出 { flag = false; for(int i=0; i<=L; i++) { if(s[i][0] < INF) //i已计算过 for(int j=0; j<=L; j++) if(s[j][0] < INF) //j已计算过 { int a = s[i][1] * s[j][2] + s[j][3]; if(s[a][0] > s[i][0] + s[j][0] + 1) //圈乘个数更少,更新 { s[a][0] = s[i][0] + s[j][0] + 1; flag = true; } } } } if(s[K][0] < INF) return s[K][0]; else return -1;}int main(){ ifstream fin("圈乘.txt"); cout << "输入整数X:"; fin >> X; cout << X; cout << "\n输入整数K:"; fin >> K; cout << K; cout << "\n最少圈乘运算个数为:" << dyna() << endl; fin.close(); return 0;}
0 0
- 圈乘运算问题
- 圈乘运算问题
- 圈乘运算问题
- opencl矩阵点乘运算及遇到的问题总结
- 多项式加减乘运算
- 两个数乘运算
- 高精度加减乘运算
- ECMAScript 乘性运算符
- 计算机基本运算(乘除法)
- 位运算代替乘除法
- 一元多项式加乘运算
- 运算符(加减乘)
- 小孩围圈问题
- 坐圈问题求解
- 小孩围圈问题
- 围圈数数问题
- 最小圈基问题
- 围圈报数问题
- 【转】图像处理就业方向
- Linux移植过程中的问题
- 24.c/c++程序员面试宝典-多态
- Swift 2.0 学习第3天: 字典和数组
- [<UIApplicationDelegate> application:didReceiveRemoteNotification:fetchCompletionHandler:], but you
- 圈乘运算问题
- 史上最详细的Android Studio系列教程四--Gradle基础
- Node.js的mysql执行多表联合查询
- 如何将Eclipse中的项目迁移到Android Studio 中
- vim 中Ctags的安装和使用
- 让UITableView自动滑动(定位)到某一行cell section刷新 cell刷新
- 遍历HashSet
- 那些年,被PHP坑过的代码
- WEB 容器、WEB服务和应用服务器的区别与联系