﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-skywalker</title><link>http://www.cppblog.com/linqiu/</link><description>想回到过去，试着让故事继续. . . . . .</description><language>zh-cn</language><lastBuildDate>Mon, 06 Apr 2026 22:29:52 GMT</lastBuildDate><pubDate>Mon, 06 Apr 2026 22:29:52 GMT</pubDate><ttl>60</ttl><item><title>求多边形重心的算法</title><link>http://www.cppblog.com/linqiu/archive/2007/08/01/29153.html</link><dc:creator>skywalker</dc:creator><author>skywalker</author><pubDate>Wed, 01 Aug 2007 14:13:00 GMT</pubDate><guid>http://www.cppblog.com/linqiu/archive/2007/08/01/29153.html</guid><wfw:comment>http://www.cppblog.com/linqiu/comments/29153.html</wfw:comment><comments>http://www.cppblog.com/linqiu/archive/2007/08/01/29153.html#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://www.cppblog.com/linqiu/comments/commentRss/29153.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linqiu/services/trackbacks/29153.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 14pt; FONT-FAMILY: Comic Sans MS">#include &lt;iostream&gt;<br>#include &lt;cmath&gt;<br>#include &lt;iomanip&gt;<br>using namespace std;</p>
<p style="FONT-SIZE: 14pt; FONT-FAMILY: Comic Sans MS">struct point<br>{<br>&nbsp;double x;<br>&nbsp;double y;<br>};</p>
<p style="FONT-SIZE: 14pt; FONT-FAMILY: Comic Sans MS">//求多边形的重心算法<br>//说明:<br>//求多边形重心并不是简单的把求三角形的重心公式推广就行了<br>//我的算法是在平面上取一点(一般取原点, 这样可以减少很多计算, 而且使思路更清晰^_^)<br>//这样就得到了N个三角形OP[i]P[i+1](其中点的顺序要为逆时针的),<br>//分别求出这N个三角形的重心Ci和面积Ai(注意此处面积是又向面积, 就是用叉乘求面积时保留其正负号)<br>//在求出A = A1+A2+...+AN(同样保留正负号的代数相加)<br>//最终重心C = sigma(Ai+Ci)/A;<br>point gravity(point *p, int n)<br>{<br>&nbsp;double area = 0;<br>&nbsp;point center;<br>&nbsp;center.x = 0;<br>&nbsp;center.y = 0;</p>
<p style="FONT-SIZE: 14pt; FONT-FAMILY: Comic Sans MS">&nbsp;for (int i = 0; i &lt; n-1; i++)<br>&nbsp;{<br>&nbsp;&nbsp;area += (p[i].x*p[i+1].y - p[i+1].x*p[i].y)/2;<br>&nbsp;&nbsp;center.x += (p[i].x*p[i+1].y - p[i+1].x*p[i].y) * (p[i].x + p[i+1].x);<br>&nbsp;&nbsp;center.y += (p[i].x*p[i+1].y - p[i+1].x*p[i].y) * (p[i].y + p[i+1].y);<br>&nbsp;}</p>
<p style="FONT-SIZE: 14pt; FONT-FAMILY: Comic Sans MS">&nbsp;area += (p[n-1].x*p[0].y - p[0].x*p[n-1].y)/2;<br>&nbsp;center.x += (p[n-1].x*p[0].y - p[0].x*p[n-1].y) * (p[n-1].x + p[0].x);<br>&nbsp;center.y += (p[n-1].x*p[0].y - p[0].x*p[n-1].y) * (p[n-1].y + p[0].y);</p>
<p style="FONT-SIZE: 14pt; FONT-FAMILY: Comic Sans MS">&nbsp;center.x /= 6*area;<br>&nbsp;center.y /= 6*area;</p>
<p style="FONT-SIZE: 14pt; FONT-FAMILY: Comic Sans MS">&nbsp;return center;<br>}</p>
<img src ="http://www.cppblog.com/linqiu/aggbug/29153.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linqiu/" target="_blank">skywalker</a> 2007-08-01 22:13 <a href="http://www.cppblog.com/linqiu/archive/2007/08/01/29153.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>求两个或N个数的最大公约数(gcd)和最小公倍数(lcm)的较优算法</title><link>http://www.cppblog.com/linqiu/archive/2007/08/01/29145.html</link><dc:creator>skywalker</dc:creator><author>skywalker</author><pubDate>Wed, 01 Aug 2007 12:12:00 GMT</pubDate><guid>http://www.cppblog.com/linqiu/archive/2007/08/01/29145.html</guid><wfw:comment>http://www.cppblog.com/linqiu/comments/29145.html</wfw:comment><comments>http://www.cppblog.com/linqiu/archive/2007/08/01/29145.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/linqiu/comments/commentRss/29145.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linqiu/services/trackbacks/29145.html</trackback:ping><description><![CDATA[<p align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="FONT-SIZE: 18pt; FONT-FAMILY: Comic Sans MS"> 求两个或N个数的最大公约数(gcd)和最小公倍数(lcm)的较优算法</span></p>
<p align=left><br>#include &lt;iostream&gt;<br>#include &lt;cmath&gt;<br>using namespace std;</p>
<p align=left>int gcd(int a, int b);<br>int ngcd(int *a, int n);<br>int lcm(int a, int b);<br>int nlcm(int *a, int n);</p>
<p align=left>int main()<br>{<br>&nbsp;//int a,b;<br>&nbsp;//cin &gt;&gt; a &gt;&gt; b;<br>&nbsp;//cout &lt;&lt; lcm(a, b) &lt;&lt; endl;<br>&nbsp;int *a = new int[3];<br>&nbsp;a[0] = 3;<br>&nbsp;a[1] = 4;<br>&nbsp;a[2] = 5;<br>&nbsp;cout &lt;&lt; nlcm(a, 3) &lt;&lt; endl;</p>
<p align=left>&nbsp;return 0;<br>}</p>
<p align=left>//两个数的最大公约数--欧几里得算法<br>int gcd(int a, int b)<br>{<br>&nbsp;if (a &lt; b)<br>&nbsp;&nbsp;swap(a, b);</p>
<p align=left>&nbsp;if (b == 0)<br>&nbsp;&nbsp;return a;<br>&nbsp;else<br>&nbsp;&nbsp;return gcd(b, a%b);<br>}</p>
<p align=left>//n个数的最大公约数算法<br>//说明: <br>//把n个数保存为一个数组<br>//参数为数组的指针和数组的大小(需要计算的数的个数)<br>//然后先求出gcd(a[0],a[1]), 然后将所求的gcd与数组的下一个元素作为gcd的参数继续求gcd<br>//这样就产生一个递归的求ngcd的算法<br>int ngcd(int *a, int n)<br>{<br>&nbsp;if (n == 1)<br>&nbsp;&nbsp;return *a;</p>
<p align=left>&nbsp;return gcd(a[n-1], ngcd(a, n-1));<br>}</p>
<p align=left>//两个数的最小公倍数(lcm)算法<br>//lcm(a, b) = a*b/gcd(a, b)<br>int lcm(int a, int b)<br>{<br>&nbsp;return a*b/gcd(a, b);<br>}</p>
<p align=left>//n个数的最小公倍数算法<br>//算法过程和n个数的最大公约数求法类似<br>//求出头两个的最小公倍数,再将欺和大三个数求最小公倍数直到数组末尾<br>//这样产生一个递归的求nlcm的算法<br>int nlcm(int *a, int n)<br>{<br>&nbsp;if (n == 1)<br>&nbsp;&nbsp;return *a;<br>&nbsp;else<br>&nbsp;&nbsp;return lcm(a[n-1], nlcm(a, n-1));<br>}</p>
<img src ="http://www.cppblog.com/linqiu/aggbug/29145.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linqiu/" target="_blank">skywalker</a> 2007-08-01 20:12 <a href="http://www.cppblog.com/linqiu/archive/2007/08/01/29145.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开blog咯~~</title><link>http://www.cppblog.com/linqiu/archive/2007/08/01/29143.html</link><dc:creator>skywalker</dc:creator><author>skywalker</author><pubDate>Wed, 01 Aug 2007 10:37:00 GMT</pubDate><guid>http://www.cppblog.com/linqiu/archive/2007/08/01/29143.html</guid><wfw:comment>http://www.cppblog.com/linqiu/comments/29143.html</wfw:comment><comments>http://www.cppblog.com/linqiu/archive/2007/08/01/29143.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/linqiu/comments/commentRss/29143.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linqiu/services/trackbacks/29143.html</trackback:ping><description><![CDATA[得找个地方来祭奠生活了~~<br>开了blog<br>晚上开香槟去~<br>~<img src="http://www.cppblog.com/CuteSoft_Client/CuteEditor/images/emwink.gif" align=absMiddle border=0>
<img src ="http://www.cppblog.com/linqiu/aggbug/29143.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linqiu/" target="_blank">skywalker</a> 2007-08-01 18:37 <a href="http://www.cppblog.com/linqiu/archive/2007/08/01/29143.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>