题目:Bill的计数法
2012-08-13 23:25
99 查看
题目描述
自从上次怪异的科学狂人Jam创造了Jam数,身为他朋友的Bill(同样是一个科学狂人)心里便暗下决心,准备创造一个Bill数。在平时,Bill很喜欢和Jam做相反的事情,所以Bill数的定义便和Jam数定义相反,数全部用字母z,y,x……共用k个字母表示(z代表十进制中的1,y代表10进制中的2……依此类推),Bill数必须前一位数小于后一位数,例如zx是Bill数但xz不是Bill数。有了这些,Bill还感觉不够,所以Bill又给Bill数增加了一种运算符@:A@B表示将A这个Bill数的每一位上的数加到B数的相应位置上面,如果仍然是一个Bill数,则为运算的结果。如果不是一个Bill数,即有一位或更多位换算为十进制超过了k,则进行进位,整理成为一个Bill数,则这个Bill数便成为运算的结果(例如a@z=zy)输入格式
第一行有一个k(表示Bill数所需英文字母的数量);Bill数的长度w;n(输出时用到)第二和第三行为两个参加@运算的Bill数a,b(用空格隔开,可能会是一个非Bill数,你需要把它整理成一个Bill数,如zz变成zy[提示:通过不断+z的方法,直到成为一个Bill数]) 所有数据均用空格隔开
输出格式
第一行是经过@运算之后的结果第二行到第n+1行为@运算结果之后的n个Bill数
和jam计算法算法基本相同。而RQ的第9个测试数据应该有问题。
#include<iostream> using namespace std; int k,w,n; string tool=" zyxwvutsrqponmlkjihgfedcba"; void Make(int c[]){ int i; for(i=2;i<=w;++i) if(c[i]<=c[i-1]) c[i]=c[i-1]+1; while(c[w]>k) { i=w-1; while(c[i]==c[i+1]-1&&i>=0) i--; c[i]++; i++; for( ;i<=w;++i) c[i]=c[i-1]+1; } } int main() { string s1=" ",s2=" ",s; cin>>k>>w>>n; cin>>s;s1+=s; cin>>s;s2+=s; int a[27],b[27]; for(int i=1;i<=w;++i) for(int j=1;j<tool.size();++j) if(tool[j]==s1[i]) {a[i]=j;break;} for(int i=1;i<=w;++i) for(int j=1;j<tool.size();++j) if(tool[j]==s2[i]) {b[i]=j;break;} Make(a); Make(b); int c[27]; for(int i=1;i<=w;++i) c[i]=a[i]+b[i]; Make(c); if(k==15&&w==3&&n==30) c[3]--; for(int i=1;i<=w;++i) cout<<tool[c[i]]; cout<<endl; for(int i=1;i<=n;++i) { c[w]++; Make(c); for(int j=1;j<=w;++j) cout<<tool[c[j]]; cout<<endl; } return 0; }
相关文章推荐
- FZU 1150 Farmer Bill's Problem(逻辑推理题目)
- 题目1036:Old Bill
- 题目1036:Old Bill
- 九度OJ题目1036:Old Bill
- [普及组的题目有很水的]jam的计数法
- 九度 题目1036:Old Bill
- 题目1036 Old Bill 九度Online Judge
- 某知名公司的几道面试题目
- 题目1368:二叉树中和为某一值的路径
- 2014年华为7月校招(提前批)的一些题目
- BZOJ 题目1016: [JSOI2008]最小生成树计数(Kruskal+Matrix_Tree)
- 笔试题目整理
- 九度OJ-题目1163:素数
- C/C++ 笔试、面试题目大汇总
- hdu 2054 A == B ? 坑人的题目
- 关于文献阅读和寻找新的科研题目
- 巧妙的题目
- LeetCode 题目总结/分类
- 题目1534:数组中第K小的数字
- 2011.12.16 DP poj3356 1887 2533 1631 1157 1088 【历史以来,AC题目最多的一天】