1、西科大 算法分析1 完整代码数字模式的识别#include #include int b4000001;int main() int max, max_i; int n, t, i; while (scanf(%d, &n) = 1) memset(b, 0, 4000001); while (n- != 0) scanf(%d, &t); +bt+2000000; max = b0; max_i = 0; for (i=1; i max) max = bi; max_i = i; printf(%dn, max_i-2000000); return 0;凸包面积#include #inclu
2、de #include #include #define max 106 using namespace std;struct point int x, y;point spotmax, p0;/p1p2距离int dis(const point &p1, const point &p2) return (p1.x - p2.x)*(p1.x - p2.x) + (p1.y - p2.y)*(p1.y - p2.y);/p1在p1p2左侧bool compares(const point &p1, const point &p2) int t; t = (p1.x - p0.x) * (p2.
3、y - p0.y) - (p2.x - p0.x) * (p1.y - p0.y); if(t 0 | (t = 0 & dis(p1, p0) dis(p2, p0) return true; else return false;double area(point p1,point p2,point p3) /计算三角形面积; double s; s=(p1.x*(p2.y-p3.y)+p2.x*(p3.y-p1.y)+p3.x*(p1.y-p2.y)/2.0; return s;int main() int n, i, x, y, p,m; stack s; cinm; while(m-)
4、 cinn; for(i = 0; i spoti.xspoti.y; x = spot0.x; y = spot0.y; p = 0; for(i = 1; i n; i+) /寻找最左上的点 if(spoti.y = y & spoti.x x)|spoti.y y) x = spoti.x; y = spoti.y; p = i; /x,y为最做点,即p0确定 p0.x = x; p0.y = y; swap(spot0, spotp); sort(spot + 1, spot + n, compares); /将0、1、2 三个点压入堆栈 S s.push(p0); s.push(sp
5、ot1); s.push(spot2); point temp; for(i = 3; i 0)/i位于spott-1spott左侧 s.push(temp); /将temp重新压入栈中 break; s.push(spoti); /将i 压入栈中 double area = 0; temp = s.top(); s.pop(); area += (p0.x * temp.y - p0.y * temp.x)/2.0; while(!s.empty() area += (temp.x * s.top().y - temp.y * s.top().x)/2.0; temp = s.top();
6、s.pop(); if (n=2) area =0; if(area 0) area = -area; coutsetiosflags(ios:fixed)setprecision(1)areaendl; return 0; 翻煎饼#includeusing namespace std;int s1000;int main() int i,n,k=0; cinn; for(i=0l;isi; for(;n1;n-) int max=0,l=0; for(i=0;imax) max=si; l=i; if(l=0) k+=1; for(i=0;in/2;i+) int t=si; si=sn-1
7、-i; sn-1-i=t; else if(ln-1) k+=2; for(i=0;i(l+1)/2;i+) int t=si; si=sl-i; sl-i=t; for(i=0;in/2;i+) int t=si; si=sn-1-i; sn-1-i=t; coutkendl; 变位词#include#include#includeusing namespace std;int main() char s11000,s21000; int n,len1,len2; cinn; while(n-) cins1s2; len1=strlen(s1); len2=strlen(s2); sort(
8、s1,s1+len1); sort(s2,s2+len2); if(strcmp(s1,s2)=0) coutYesendl; else coutNoendl; Polynomial calculate#include int main()int i, n, x, sum, num22;scanf(%d%d, &n, &x);for (i = 0; i = 0; i-)sum = sum * x + numi;printf(%dn, sum);大整数乘法#include#includevoid main() int i,j,k,i1,m,i2,n,a205=0; long b,c,d; cha
9、r s1100,s2100; scanf(%d,&m); scanf(%s,s1); scanf(%s,s2); d=0; for(i1=0,k=m-1;i1m;i1+,k-) for(i2=0,j=m-1;i20) i+; ai=ai+d%10; d=d/10; n=i; for(i=n;i=0;i-)printf(%d,ai); printf(n);return 0;Gold Nuggets Distribution#include#include#define MAX 50000000#define MIN -50000000int main()int i;int n;int weigh
10、t;int min = MAX;int max = MIN;scanf(%d, &n);for (i = 0; i max)max = weight;if (weight min)min = weight;printf(%d %dn, max, min);return 0; The Dutch Flag Problem #include using namespace std; int main() int n,coutr=0,coutb=0,coutw=0,i; char a500005; cinn; for(i=0;iai; for(i=0;in;i+) if(ai=W) coutw+;
11、else if(ai=R) coutr+; else if(ai=B) coutb+; for(i=0;icoutr;i+) coutR; for(i=0;icoutw;i+) coutW; for(i=0;icoutb;i+) coutB; coutendl; return 0; PostOffice#include#includeusing namespace std;int f(int a) return an; int *a=new intn; int *b=new intn; for(i=0;iaibi; sort(a,a+n); sort(b,b+n); j=an/2; k=bn/
12、2; int l=0; for(i=0;in;i+) l+=f(ai-j)+f(bi-k); coutlendl;The Josephus Problem#include typedef unsigned int uint;int main()uint n;uint sum = 1;scanf(%d, &n);while(sum = n)sum = sum * 2;n = n 1;sum = n & sum;n = n & (sum);n = n | 0x0001;printf(%dn, n);return 0;Horner scheme#include int main()int i, n,
13、 x, sum, num22;scanf(%d%d, &n, &x);for (i = 0; i = 0; i-)sum = sum * x + numi;printf(%dn, sum);排列的字典序问题#include int main()int i, j, n, k, tmp, lens, labelNum = 15, label, iCount2, sum =0, iCount = 0, num14;scanf(%d, &n);for (i = 0; i n; i+)scanf(%d, &numi);for (i = 0; i n - 1; i+)iCount = 0;for (j =
14、 i + 1; j numj)iCount+;if (iCount != 0)k = n - i - 1;iCount2 = 1;while(k 0)iCount2 *= k;k-;sum += iCount * iCount2;printf(%dn,sum);for (i = n - 2; i = 0; i-) if (numi numi+1)break;if (-1 != i) /如果全是降序可能越界,即 i = -1for (k = i + 1; k n; k+)if (numk numi)continue;if (numk labelNum)labelNum = numk;label
15、= k;tmp = numi;numi = numlabel;numlabel = tmp;lens = n - 1 - i;for (k = 1; k = lens / 2; k+)tmp = numi + k;numi + k = numn - k;numn - k = tmp;for (i = 0; i n; i+)if (i != n - 1)printf(%d , numi);elseprintf(%d n, numi);/最后输出也有空格Binary search#include int binSearch(int num, int n, int key)int low = 0,
16、high = n - 1, mid;while(high = low)mid = (high + low) / 2;if (nummid = key )return mid;else if (nummid key)high = mid - 1;elselow = mid + 1;return -1;int main()int i, n, key, iCount, num5000001;scanf(%d%d, &n, &key);for (i = 0; i n; i+)scanf(%d, &numi);iCount = binSearch(num, n, key);if (-1 = iCount
17、)printf(-1n);elseprintf(%dn, iCount + 1);return 0;俄式乘法#include #include int main()int a100;int n, m, i, sum = 0, iCount = 0;scanf(%d%d, &n, &m);while(1 != n)if (0 = n % 2)n /= 2;elsen = (n - 1) / 2;aiCount+ = m;sum += aiCount - 1;m *= 2;aiCount+ = m;sum += m;for(i = 0; i iCount; i+)if (i != iCount -
18、 1)printf(%d + , ai);elseprintf(%d = %dn, ai, sum);return 0;Pipeline#include #include #include using namespace std;int main()int sumDistance = 0, oilMount, oilCount, oil10001, i, j;cin oilMount;for (i = 0; i j oili;sort(oil, oil + oilMount);oilCount = oilMount / 2;for (i = 0; i oilMount; i+)sumDista
19、nce += abs(oiloilCount - oili);cout sumDistance endl;return 0;最近对问题#include #include #define INF 10000000001int main()int n, i, m, k, j, posX1001, posY1001;double min = INF ;scanf(%d, &n);for (i = 0; i n; i+)min = INF;scanf(%d, &m);for (k = 0; k m; k+)scanf(%d%d, &posXk, &posYk);for (k = 0; k m - 1; k+)for (j = k + 1; j (posXj - posXk) * (posXj - posXk) + (posYj - posYk) * (posYj - posYk)min = (posXj - posXk) * (posXj - posXk) + (posYj - posYk) * (posYj - posYk);printf(%.4fn, sqrt(min);return 0;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1