2014年2月27日

摘要: 原题链接题目大意:一群人聚众赌博。每个人先分别押注不同的金额,可以相互借钱。开奖之后,如果某个人的押注的金额正好等于任何其他三个人金额总和,那这个人就赢得其他三个人的赌注。如果同时有两个以上的赢家,押注金额最大的那个人是最终的赢家。首先输入玩家的个数,然后输入每个玩家的押注金额,经过运算输出赢家的财富(或者 no solution)。解法:参考代码:参考了下面链接的文章。首先,对所有押注金额进行从小到大排序,然后用枚举法试。因为并列的赢家取押注最多的获胜,所以从后往前试赢家的押注金额。稍作分析可知三个数当中,至少要有一个数在目标数的左边(小于),另外两个数可能在左边,也可能在右边(因为押注金额 阅读全文
posted @ 2014-02-27 00:24 KK4SBB 阅读(296) 评论(0) 推荐(0)
 
摘要: 原题链接题目大意:模拟一个浏览器,打开一个网页、后退或者前进,输出网址。解法:用两个堆栈分别表示后退保存的网页和前进保存的网页。初始化时把当前页面压入后退堆栈的栈顶。要注意几点,一个是每次记得要清空两个堆栈,另一个,如果后退之后又打开了新的网页,前进的堆栈要清空,这和真实的浏览器的结果是一致的。参考代码:#include#include#includeusing namespace std;stack back;stack forw;int main(){ int n; cin>>n; while(n--){ string cmd,url="http://www.acm. 阅读全文
posted @ 2014-02-27 00:24 KK4SBB 阅读(398) 评论(0) 推荐(0)
 
摘要: 原题链接题目大意:给一句话,把每个单词倒序,然后输出。解法:我是用了一个堆栈,以空格来拆分单词,把每个字母压入堆栈,然后依次输出。参考代码:/** 字符串反向,140ms,188kb* 单词反向用堆栈是比较方便的,一个个压入,遇到空格再一个个弹出* 但是不知道为什么耗时这么多,大批的人都是0ms,160kb,难道用字符串处理效率高这么多?*/#include#include#include#includeusing namespace std;int main(){ int i,j,n,cases; string str; char *p,c[80]; stack word; cin>& 阅读全文
posted @ 2014-02-27 00:24 KK4SBB 阅读(411) 评论(0) 推荐(0)
 
摘要: 原题链接题目大意:已知三角形的三个顶点坐标,求其外接圆的周长。解法:刚看到这道题时,马上拿出草稿纸画图,想推导出重心坐标,然后求出半径,再求周长。可是这个过程太复杂了,写到一半就没有兴致了,还是求助于Google。在Wiki百科找到一个已知三条边长度,求外接三角形周长的算法,diameter = abc/2*(sqrt(s(s-a)(s-b)(s-c)),s=(a+b+c)/2。问题瞬间简化了,求两点距离是很方便的一件事,然后套用这个公式就可以了。参考代码:#include#include#include#define PI 3.141592653589793using namespace s 阅读全文
posted @ 2014-02-27 00:24 KK4SBB 阅读(302) 评论(0) 推荐(0)
 
摘要: 原题链接题目大意:判断一个数是不是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 阅读全文
posted @ 2014-02-27 00:24 KK4SBB 阅读(584) 评论(0) 推荐(0)
 
摘要: 原题链接题目大意:给出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;} 阅读全文
posted @ 2014-02-27 00:23 KK4SBB 阅读(283) 评论(0) 推荐(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& 阅读全文
posted @ 2014-02-27 00:23 KK4SBB 阅读(292) 评论(0) 推荐(0)
 
摘要: 原题链接题目大意:给一个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<<... 阅读全文
posted @ 2014-02-27 00:23 KK4SBB 阅读(225) 评论(0) 推荐(0)
 
摘要: 原题链接题目大意:给定一串字符串,查找字符串里字母逆序排列的对数,按照由少到多的顺序把所有字符串进行排列。解法:用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; 阅读全文
posted @ 2014-02-27 00:23 KK4SBB 阅读(366) 评论(0) 推荐(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; 阅读全文
posted @ 2014-02-27 00:23 KK4SBB 阅读(476) 评论(0) 推荐(0)