摘要:
原题链接题目大意:判断一个数是不是palindrom。不限于十进制,可以在任何进制下判断。解法:还好,数字的范围不大,int类型足够搞定。方法就是从2进制开始,先把数字转换成2进制,判断是否对称,然后转换成3进制,直到16进制。这里的进制转换方法可以留意一下。参考代码:#includeusing namespace std;bool isPalindrom(int, int);int main(){ int i,n; while(cin>>n&&n!=0){ bool base[17]={false}, flag=false;; for(i=2;i<=16;i 阅读全文
2014年2月27日
摘要:
原题链接题目大意:一群人聚众赌博。每个人先分别押注不同的金额,可以相互借钱。开奖之后,如果某个人的押注的金额正好等于任何其他三个人金额总和,那这个人就赢得其他三个人的赌注。如果同时有两个以上的赢家,押注金额最大的那个人是最终的赢家。首先输入玩家的个数,然后输入每个玩家的押注金额,经过运算输出赢家的财富(或者 no solution)。解法:参考代码:参考了下面链接的文章。首先,对所有押注金额进行从小到大排序,然后用枚举法试。因为并列的赢家取押注最多的获胜,所以从后往前试赢家的押注金额。稍作分析可知三个数当中,至少要有一个数在目标数的左边(小于),另外两个数可能在左边,也可能在右边(因为押注金额 阅读全文
摘要:
原题链接题目大意:模拟一个浏览器,打开一个网页、后退或者前进,输出网址。解法:用两个堆栈分别表示后退保存的网页和前进保存的网页。初始化时把当前页面压入后退堆栈的栈顶。要注意几点,一个是每次记得要清空两个堆栈,另一个,如果后退之后又打开了新的网页,前进的堆栈要清空,这和真实的浏览器的结果是一致的。参考代码:#include#include#includeusing namespace std;stack back;stack forw;int main(){ int n; cin>>n; while(n--){ string cmd,url="http://www.acm. 阅读全文
摘要:
原题链接题目大意:Arbitrage这个单词的解释是“套利交易”,就是利用几个币种之间的汇率差价来赚钱。比如人民币兑美元6:1,美元兑欧元1.5:1,欧元兑人民币10:1,那么用9元人民币可以换1.5美元,1.5美元换1欧元,1欧元换10元人民币。这样一倒手,就赚了1元。这是闷声发大财的典型例子!解法:在做这道题的时候,又学会了一种新的算法(Floyd算法)。具体过程是开辟一个方阵,每行每列都对应一种货币,每个元素就是横纵两种货币的汇率。然后是一个三层循环,最外层的循环是表示过度节点的,这一层必须放在最外面,里面两层是行和列的扫描。如果经过某一个过渡点汇率增加了,就更新这个节点。这里还要注意一 阅读全文
摘要:
原题链接题目大意:给出12个月的收入,求一个平均值。解法:没什么好说的,就是一个除法。参考代码:#includeint main(){ int i; float sum=0,k; for(i=0;i<12;i++){ scanf("%f",&k); sum+=k; } sum=sum/12; printf("$%.2f",sum); return 0;} 阅读全文
摘要:
原题链接题目大意:一道类似于简单图像压缩的题目。给定一个调色板,然后把24位真彩色按照就近原则聚类。解法:每个像素的色彩都是RGB三个值,相当于三维空间的一个点。所以当一个新的像素进来时,分别和调色板中的每一个颜色求欧式距离,距离最近的那个点就是应该归属的那个类。参考代码:#include#include#define R 0#define G 1#define B 2int target[16][3];int main(){ int i,j,min,index; int RGB[3]; float dist; for(i=0;i<16;i++){ scanf("%d%d%d& 阅读全文
摘要:
原题链接题目大意:给一个16位的数字,表示一个浮点数,按照规则转换成科学计数法表示。解法:注释比较清楚了,注意浮点运算的四舍五入问题。参考代码:#include#include#include#include#includeusing namespace std;int main(){ char in[16],out[16]; int i,j,n,exp,man,zero; double num; cout10-1e-6){ while(num>10-1e-6){ num/=10; exp++; } } else if(num=0){ cout-10)cout<<... 阅读全文
摘要:
原题链接题目大意:给定一串字符串,查找字符串里字母逆序排列的对数,按照由少到多的顺序把所有字符串进行排列。解法:用C++字符串string类的iterator,从每个字符串的起始开始,查找逆序字符的个数,然后用qsort方法按照reverseCount的大小快速排序。参考代码:#include#include#include#include#includeusing namespace std;struct DNAStr{ int index,reverseCount; string str;}DNA[102];int countReverse(string s){ int num = 0; 阅读全文
摘要:
原题链接题目大意:按照规则解码。26个字母分成三组,每一组按照顺时针移位编码。现在已知移动的位数,要求解码。解法:以前看过一本古典密码学的书,百度贴吧密码吧也有很多经典的加密方法,想什么凯撒移位、弗吉尼亚编码等等。古典密码学比现代密码学有趣多了。这道题可以开三个队列,先把字符串压入对应的队列,然后调整顺序,再合成输出。不难,稍烦。参考代码:#include#include#include#includeusing namespace std;int main(){ int k1,k2,k3,i,len,pos[100]; char str[100],c; queue s1; queue s2; 阅读全文
摘要:
原题链接题目大意:浙大的破网络容量有限,太多人同时使用BBS就会系统崩溃。为了保持系统正常工作,过载时就需要切断部分用户。规则是把玉泉所有的建筑从1到n编号,设定一个常数m。从1开始数,第m幢建筑的网络被切断,然后再从1开始继续往下数。数到n之后回到第1幢。曹光彪大楼的编号是2,这是计算机学院的大本营。此题的目的就是根据上述规则,确定常数m,使得曹楼是全校最后一幢被切断网络的建筑。解法:在数学界有一个经典的约瑟夫环问题(Josephus Problem)。约瑟夫环问题是这样的,有n个人围成一个圈,分别编号为1,2,3…n,从第1个人开始报数,报到偶数的人出列,剩下的人继续,直到仅剩最后一个人位 阅读全文