关于算法的有关问题
请教高手关于算法的问题
1、有0.1,0.5,1,5,10,20,50,100共8个数字 现在需要组合成100问共有多少种组合方式?打印出这些组合
2、设计一个算法,实现将数字通过26进制转化为字符(如:0-A,1-B,26-AA,27-AB,28-AC,52-BA,78-CA)
------解决方案--------------------
第一个问好像是
1毛,5毛,一块,五块,十块,二十块,五十块,一百块哦。和速算24算法相似
------解决方案--------------------
第二个:可以定义一个26维的数组letter[26]。letter[1] = 'A',letter[2] = 'B‘.....
然后就是平常转二进制的方法。输出改成letter[i]就行了···
------解决方案--------------------
2应该用栈来解决
------解决方案--------------------
第一题可以用穷举···每个数的限制条件就是100除以每一个数所得的最大个数···
不过效率有点低···
等大牛···
------解决方案--------------------
第二题:
1、有0.1,0.5,1,5,10,20,50,100共8个数字 现在需要组合成100问共有多少种组合方式?打印出这些组合
2、设计一个算法,实现将数字通过26进制转化为字符(如:0-A,1-B,26-AA,27-AB,28-AC,52-BA,78-CA)
------解决方案--------------------
第一个问好像是
1毛,5毛,一块,五块,十块,二十块,五十块,一百块哦。和速算24算法相似
------解决方案--------------------
第二个:可以定义一个26维的数组letter[26]。letter[1] = 'A',letter[2] = 'B‘.....
然后就是平常转二进制的方法。输出改成letter[i]就行了···
------解决方案--------------------
2应该用栈来解决
------解决方案--------------------
第一题可以用穷举···每个数的限制条件就是100除以每一个数所得的最大个数···
不过效率有点低···
等大牛···
------解决方案--------------------
第二题:
- C/C++ code
#include <iostream> using namespace std; int main() { int num; char str[256] = {'A'};//如果输入0的话,循环不执行,那么输出就要特殊处理了 int index = 0; cin>>num; while(num) { str[index++] = num%26 + 65; num /=26; } cout<<num<<"的26进制表示:"; if (index == 0) { index++; } for (int i = index--; i >= 0; i--) { cout<<str[i]; } cout<<endl; return 0; }
------解决方案--------------------
A是0 26怎么会是AA呢 是BA
代码如下
- C/C++ code
int main() { int val; while(cin >> val) { int top = -1; char stack[100] = {0}; if(val == 0) stack[++top] = 'A'; while(val) { stack[++top] = val % 26 + 'A'; val = val / 26; } while(top >= 0) cout << stack[top--]; cout << endl; } return 0; }