acm训练题-计算两点之间的距离

合集下载

acm数学竞赛试题

acm数学竞赛试题

acm数学竞赛试题
ACM数学竞赛试题通常涉及各种数学领域,包括但不限于代数、几何、概率统计和组合数学等。

以下是一些经典的ACM数学竞赛试题:
1. 平面上n个点的k距离和最小值问题:给定平面上n个点,对于每个点,计算它到其他所有点的距离,然后求出这些距离中的k个最小值。

问题是:如何有效地计算这k个最小值?
2.最长公共子序列问题:给定两个序列,找出它们的最长公共子序列。

例如,对于序列
A = [1, 2, 3, 4] 和
B = [2, 3, 4, 5],最长公共子序列是[2, 3, 4]。

3. 凸包问题:给定平面上的一组点,找到一个最小的凸多边形,使得这个多边形能够包含这组点中的所有点。

4. 最短路问题:给定一个有向图,其中每条边都有一个非负的权重,找出图中任意两点之间的最短路径。

5. 子集和问题:给定一个正整数数组和一个目标值,判断数组中是否存在和为目标值的两个非空子集。

例如,给定数组[1, 2, 3, 4] 和目标值7,判断是否存在两个子集,它们的和分别为7。

以上只是ACM数学竞赛试题的一部分,实际上还有更多涉及数学各个领域的题目。

要提高解决这类问题的能力,需要不断练习和研究。

初一数学模拟试卷

初一数学模拟试卷

初一数学模拟试卷考试范围:xxx ;考试时间:xxx 分钟;出题人:xxx 姓名:___________班级:___________考号:___________1.答题前填写好自己的姓名、班级、考号等信息 2.请将答案正确填写在答题卡上一、选择题1.已知两个同心圆的圆心为O ,半径分别是2和3,且2<OP <3,那么点P 在( )A .小圆内B .大圆内C .小圆外大圆内D .大圆外 2.下列各组的两个数中,运算后的结果相等的是( ) A .和 B .和C .和D .和3.已知AB=10cm ,在AB 的延长线上取一点C ,使AC=16cm ,则线段AB 的中点与AC 的中点的距离为( ) A .5cm B .4cm C .3cm D .2cm4.下列各对数中,相等的一对是( ) A .与B .与C .与D .与5.如图为我县十二月份某一天的天气预报,该天最高气温比最低气温高( )A .﹣3℃B .7℃C .3℃D .﹣7℃6.如图,BF 上有两点D 、C ,AC 与DE 相交于点G ,则下列三角形的表示中,不能在图中找到的是( )A. △ABCB. △DCGC. △BCDD. △DEF7.在同一平面上,若∠BOA =60.3°,∠BOC =20°30′,则∠AOC 的度数是( )A .80.6°B .40°C .80.8°或39.8°D .80.6°或40°8.一个三角形的两个内角分别为55°和65°,这个三角形的外角不可能是( )A .115°B .120°C .125°D .130°9.已知一个数a 的近似值为1.50,那么数a 的准确值的范围是( ) A .1.495<a <1.505 B .1 .495≤a <1.505 C .1.45≤a <1.55 D .1.45<a <1.5510.观察下列图形,并阅读图形下面的相关文字,如图所示:两条直线相交,三条直线相交,四条直线相交,最多有一个交点,最多有三个交点;最多有6个交点,像这样,10条直线相交,最多交点的个数是( )A .40个B .45个C .50个D .55个二、判断题11.解一元一次方程(1) (2)12.邻居张叔叔星期天准备做两件事:一是到邮局拿某杂志社寄给自己的论文稿费,二是买礼物送爸妈和女友.(1)邻居张叔叔先到邮局拿论文稿费.国家规定稿费超过一定数额需缴纳所得税,有关规定如下表:张叔叔从邮局拿到税后稿费为3380元,问该杂志社给张叔叔的税前论文稿费为多少元?(2)邻居张叔叔拿到稿费后到商店准备为爸妈买四盒“补雪”牌补品,同时为女友买三瓶相同的“露”牌化妆品.张叔叔对比了甲、乙两家商店这两种商品的标价,发现“补雪”牌补品都是每盒300元,“露”牌化妆品都是每瓶200元.现在两家商店正在搞促销活动,促销办法如下表:请你帮助邻居张叔叔出个主意,要在这两个店买,应怎样买最省钱?共需多少钱,并写出购买方案.13.为响应国家要求中小学生每天锻炼1小时的号召,某校开展了形式多样的“阳光体育运动”活动,小明对某班同学参加锻炼的情况进行了统计,并绘制了下面的图1和图2.(1)该班共有多少名学生?(2)请在图1中将“乒乓球”部分的图形补充完整;(3)若全年级共有1200名学生,估计全年级参加乒乓球活动的学生有多少名?(4)求出扇形统计图中表示“足球”的扇形的圆心角度数.14.如图,点C 在线段AB 上,AC=16cm ,CB=12cm ,点M 、N 分别是AC 、BC 的中点.(1)求线段MN 的长;(2)若C 为线段AB 上任一点,满足AC+CB="a" cm ,其它条件不变,你能猜想MN 的长度吗?并说明理由.(3)若C 在线段AB 的延长线上,且满足AC ﹣BC="b" cm ,M 、N 分别为AC 、BC 的中点,你能猜想MN 的长度吗?请画出图形,写出你的结论,不要说明理由. 15.若的积中不含与项,(1)求、的值; (2)求代数式的值;三、填空题16.在方格图当中,需要添加哪几个正方形,才能使其构成正方体的展开图,它们为__________.(填序号)17.单项式的系数是 .18.如图,若AB ∥CD ,那么∠3=∠4,依据是 .19.(2015秋•泗县校级月考)有A、B两点,在数轴上分别表示实数a、b,若a的绝对值是b的绝对值的4倍,且A、B两点的距离是15,求a、b的值.(1)若A、B两点在原点的同侧:A、B两点都在原点的左侧时,a= ,b= ,A、B两点都在原点的右侧时,a= ,b= .(2)若A、B两点在原点的两侧:A在原点的左侧、B在原点的右侧时,a= ,b= ,A在原点的右侧、B在原点的左侧时,a= ,b= .20.小亮将两张长方形纸片如图所示摆放,使小长方形纸片的一个顶点正好落在大长方形纸片的边上,测得∠1=,则∠2= °.四、计算题21.(2015•重庆模拟)解方程:2﹣=.22.(x+2)(2x-3)- x(x+1)五、解答题23.3x2·x n-2+3(-x) 2·x n-3·(-x)24.若是方程组的解,求、的值。

计算两点之间的最短距离

计算两点之间的最短距离

计算两点之间的最短距离题⽬链接:题⽬⼤意:给定N个点的坐标,找出距离最短的两个点的序号.如果最短距离相同,输出序号最⼩的⼀组.题⽬要求输出三种不同计算⽅式下的最短距离序号:欧⼏⾥得距离:Math.sqrt(|x2-x1|2+|y2-y1|2)曼哈顿距离:|x2-x1|+|y2-y1|棋盘距离:Math.max(|x2-x1|,|y2-y1|)因为N的个数是5000个,可以直接双重循环取得最⼩距离. 单纯的理解⼀下三种距离.Accept代码:import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;import java.util.StringTokenizer;public class source {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));StringTokenizer st = new StringTokenizer(br.readLine());int N = Integer.parseInt(st.nextToken());int[][] points = new int[N+1][2];for(int i = 1;i<=N;i++){st = new StringTokenizer(br.readLine());points[i] = new int[]{Integer.parseInt(st.nextToken()),Integer.parseInt(st.nextToken())};}List<int[]> result = getEuclidPosition(points);for(int[] ans:result){System.out.println(ans[0]+" "+ans[1]);}}private static List<int[]> getEuclidPosition(int[][] points){double minEuclidDistance = Integer.MAX_VALUE;int[] euclidPosition = new int[2];double minCityDistance = Integer.MAX_VALUE;int[] cityPosition = new int[2];double minChessDistance = Integer.MAX_VALUE;int[] chessPosition = new int[2];CalcMinPoint calcMinPointEuclid;CalcMinPoint calcMinPointCity;CalcMinPoint calcMinPointChess;for(int i = 1;i<points.length;i++){for(int j = 1;j<points.length;j++){if(i == j){continue;}double euclidDistance = getEuclidDistance(points[i],points[j]);double cityDistance = getCityDistance(points[i],points[j]);double chessDistance = getChessDistance(points[i],points[j]);calcMinPointEuclid = new CalcMinPoint(minEuclidDistance, euclidPosition, i, j, euclidDistance).invoke(); minEuclidDistance = calcMinPointEuclid.getMinEuclidDistance();euclidPosition = calcMinPointEuclid.getEuclidPosition();calcMinPointCity = new CalcMinPoint(minCityDistance, cityPosition, i, j, cityDistance).invoke(); minCityDistance = calcMinPointCity.getMinEuclidDistance();cityPosition = calcMinPointCity.getEuclidPosition();calcMinPointChess = new CalcMinPoint(minChessDistance, chessPosition, i, j, chessDistance).invoke(); minChessDistance = calcMinPointChess.getMinEuclidDistance();chessPosition = calcMinPointChess.getEuclidPosition();}}List<int[]> result = new ArrayList<int[]>();result.add(euclidPosition);result.add(cityPosition);result.add(chessPosition);return result;}private static double getChessDistance(int[] point, int[] point1) {return Math.max(Math.abs(point[0]-point1[0]),Math.abs(point[1]-point1[1]));}private static double getCityDistance(int[] point, int[] point1) {return Math.abs(point[0]-point1[0])+Math.abs(point[1]-point1[1]);}private static double getEuclidDistance(int[] p1, int[] p2){return Math.pow(p1[0]-p2[0],2)+Math.pow(p1[1]-p2[1],2);}private static class CalcMinPoint {private double minEuclidDistance;private int[] euclidPosition;private int i;private int j;private double euclidDistance;public CalcMinPoint(double minEuclidDistance, int[] euclidPosition, int i, int j, double euclidDistance) { this.minEuclidDistance = minEuclidDistance;this.euclidPosition = euclidPosition;this.i = i;this.j = j;this.euclidDistance = euclidDistance;}public double getMinEuclidDistance() {return minEuclidDistance;}public int[] getEuclidPosition() {return euclidPosition;}public CalcMinPoint invoke() {if(minEuclidDistance > euclidDistance){minEuclidDistance = euclidDistance;if(i < j){euclidPosition = new int[]{i,j};}else{euclidPosition = new int[]{j,i};}}else if(minEuclidDistance == euclidDistance){int position0 = -1;int position1 = -1;if(i<j){ position0 = i; position1 = j; } else{ position0 = j; position1 = i; } if(euclidPosition[0]>position0){ euclidPosition = new int[]{position0,position1};}else if(euclidPosition[0] == position0 && euclidPosition[1]>position1){euclidPosition = new int[]{position0,position1};}}return this;}}}。

ACM程序竞赛计算几何超全模板

ACM程序竞赛计算几何超全模板

/*计算几何目录㈠点的基本运算1. 平面上两点之间距离12. 判断两点是否重合13. 矢量叉乘14. 矢量点乘25. 判断点是否在线段上26. 求一点饶某点旋转后的坐标27. 求矢量夹角2㈡线段及直线的基本运算1. 点与线段的关系32. 求点到线段所在直线垂线的垂足43. 点到线段的最近点44. 点到线段所在直线的距离45. 点到折线集的最近距离46. 判断圆是否在多边形内57. 求矢量夹角余弦58. 求线段之间的夹角59. 判断线段是否相交610.判断线段是否相交但不交在端点处611.求线段所在直线的方程612.求直线的斜率713.求直线的倾斜角714.求点关于某直线的对称点715.判断两条直线是否相交及求直线交点716.判断线段是否相交,如果相交返回交点7㈢多边形常用算法模块1. 判断多边形是否简单多边形82. 检查多边形顶点的凸凹性93. 判断多边形是否凸多边形94. 求多边形面积95. 判断多边形顶点的排列方向,方法一106. 判断多边形顶点的排列方向,方法二107. 射线法判断点是否在多边形内108. 判断点是否在凸多边形内119. 寻找点集的graham算法1210.寻找点集凸包的卷包裹法1311.判断线段是否在多边形内1412.求简单多边形的重心1513.求凸多边形的重心1714.求肯定在给定多边形内的一个点1715.求从多边形外一点出发到该多边形的切线1816.判断多边形的核是否存在19㈣圆的基本运算1 .点是否在圆内202 .求不共线的三点所确定的圆21㈤矩形的基本运算1.已知矩形三点坐标,求第4点坐标22㈥常用算法的描述22㈦补充1.两圆关系:242.判断圆是否在矩形内:243.点到平面的距离:254.点是否在直线同侧:255.镜面反射线:256.矩形包含:267.两圆交点:278.两圆公共面积:289. 圆和直线关系:2910. 内切圆:3011. 求切点:3112. 线段的左右旋:3113.公式:32*//* 需要包含的头文件*/#include <cmath >/* 常用的常量定义*/const double INF = 1E200const double EP = 1E-10const int MAXV = 300const double PI = 3.14159265/* 基本几何结构*/struct POINT{double x;double y;POINT(double a=0, double b=0) { x=a; y=b;} //constructor};struct LINESEG{POINT s;POINT e;LINESEG(POINT a, POINT b) { s=a; e=b;}LINESEG() { }};struct LINE // 直线的解析方程a*x+b*y+c=0 为统一表示,约定a >= 0{double a;double b;double c;LINE(double d1=1, double d2=-1, double d3=0) {a=d1; b=d2; c=d3;}};/*********************** ** 点的基本运算** ***********************/double dist(POINT p1,POINT p2) // 返回两点之间欧氏距离{return( sqrt( (p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y) ) );}bool equal_point(POINT p1,POINT p2) // 判断两个点是否重合{return ( (abs(p1.x-p2.x)<EP)&&(abs(p1.y-p2.y)<EP) );}/****************************************************************************** r=multiply(sp,ep,op),得到(sp-op)和(ep-op)的叉积r>0:ep在矢量opsp的逆时针方向;r=0:opspep三点共线;r<0:ep在矢量opsp的顺时针方向******************************************************************************* /double multiply(POINT sp,POINT ep,POINT op){return((sp.x-op.x)*(ep.y-op.y)-(ep.x-op.x)*(sp.y-op.y));}/*r=dotmultiply(p1,p2,op),得到矢量(p1-op)和(p2-op)的点积,如果两个矢量都非零矢量r<0:两矢量夹角为锐角;r=0:两矢量夹角为直角;r>0:两矢量夹角为钝角******************************************************************************* /double dotmultiply(POINT p1,POINT p2,POINT p0){return ((p1.x-p0.x)*(p2.x-p0.x)+(p1.y-p0.y)*(p2.y-p0.y));}/****************************************************************************** 判断点p是否在线段l上条件:(p在线段l所在的直线上) && (点p在以线段l为对角线的矩形内)******************************************************************************* /bool online(LINESEG l,POINT p){return( (multiply(l.e,p,l.s)==0) &&( ( (p.x-l.s.x)*(p.x-l.e.x)<=0 )&&( (p.y-l.s.y)*(p.y-l.e.y)<=0 ) ) ); }// 返回点p以点o为圆心逆时针旋转alpha(单位:弧度)后所在的位置POINT rotate(POINT o,double alpha,POINT p){POINT tp;p.x-=o.x;p.y-=o.y;tp.x=p.x*cos(alpha)-p.y*sin(alpha)+o.x;tp.y=p.y*cos(alpha)+p.x*sin(alpha)+o.y;return tp;}/* 返回顶角在o点,起始边为os,终止边为oe的夹角(单位:弧度)角度小于pi,返回正值角度大于pi,返回负值可以用于求线段之间的夹角原理:r = dotmultiply(s,e,o) / (dist(o,s)*dist(o,e))r'= multiply(s,e,o)r >= 1 angle = 0;r <= -1 angle = -PI-1<r<1 && r'>0 angle = arccos(r)-1<r<1 && r'<=0 angle = -arccos(r)*/double angle(POINT o,POINT s,POINT e){double cosfi,fi,norm;double dsx = s.x - o.x;double dsy = s.y - o.y;double dex = e.x - o.x;double dey = e.y - o.y;cosfi=dsx*dex+dsy*dey;norm=(dsx*dsx+dsy*dsy)*(dex*dex+dey*dey);cosfi /= sqrt( norm );if (cosfi >= 1.0 ) return 0;if (cosfi <= -1.0 ) return -3.1415926;fi=acos(cosfi);if (dsx*dey-dsy*dex>0) return fi; // 说明矢量os 在矢量oe的顺时针方向return -fi;}/*****************************\* ** 线段及直线的基本运算** *\*****************************//* 判断点与线段的关系,用途很广泛本函数是根据下面的公式写的,P是点C到线段AB所在直线的垂足AC dot ABr = ---------||AB||^2(Cx-Ax)(Bx-Ax) + (Cy-Ay)(By-Ay)= -------------------------------L^2r has the following meaning:r=0 P = Ar=1 P = Br<0 P is on the backward extension of ABr>1 P is on the forward extension of AB0<r<1 P is interior to AB*/double relation(POINT p,LINESEG l){LINESEG tl;tl.s=l.s;tl.e=p;return dotmultiply(tl.e,l.e,l.s)/(dist(l.s,l.e)*dist(l.s,l.e));}// 求点C到线段AB所在直线的垂足PPOINT perpendicular(POINT p,LINESEG l){double r=relation(p,l);POINT tp;tp.x=l.s.x+r*(l.e.x-l.s.x);tp.y=l.s.y+r*(l.e.y-l.s.y);return tp;}/* 求点p到线段l的最短距离,并返回线段上距该点最近的点np注意:np是线段l上到点p最近的点,不一定是垂足*/double ptolinesegdist(POINT p,LINESEG l,POINT &np){double r=relation(p,l);if(r<0){np=l.s;return dist(p,l.s);}if(r>1){np=l.e;return dist(p,l.e);}np=perpendicular(p,l);return dist(p,np);}// 求点p到线段l所在直线的距离,请注意本函数与上个函数的区别double ptoldist(POINT p,LINESEG l){return abs(multiply(p,l.e,l.s))/dist(l.s,l.e);}/* 计算点到折线集的最近距离,并返回最近点.注意:调用的是ptolineseg()函数*/double ptopointset(int vcount,POINT pointset[],POINT p,POINT &q) {int i;double cd=double(INF),td;LINESEG l;POINT tq,cq;for(i=0;i<vcount-1;i++)l.s=pointset[i];l.e=pointset[i+1];td=ptolinesegdist(p,l,tq);if(td<cd){cd=td;cq=tq;}}q=cq;return cd;}/* 判断圆是否在多边形内.ptolineseg()函数的应用2 */bool CircleInsidePolygon(int vcount,POINT center,double radius,POINT polygon[]){POINT q;double d;q.x=0;q.y=0;d=ptopointset(vcount,polygon,center,q);if(d<radius||fabs(d-radius)<EP)return true;elsereturn false;}/* 返回两个矢量l1和l2的夹角的余弦(-1 --- 1)注意:如果想从余弦求夹角的话,注意反余弦函数的定义域是从0到pi */double cosine(LINESEG l1,LINESEG l2){return (((l1.e.x-l1.s.x)*(l2.e.x-l2.s.x) +(l1.e.y-l1.s.y)*(l2.e.y-l2.s.y))/(dist(l1.e,l1.s)*dist(l2.e,l2.s))) );}// 返回线段l1与l2之间的夹角单位:弧度范围(-pi,pi)double lsangle(LINESEG l1,LINESEG l2){POINT o,s,e;o.x=o.y=0;s.x=l1.e.x-l1.s.x;s.y=l1.e.y-l1.s.y;e.x=l2.e.x-l2.s.x;e.y=l2.e.y-l2.s.y;return angle(o,s,e);// 如果线段u和v相交(包括相交在端点处)时,返回true////判断P1P2跨立Q1Q2的依据是:( P1 - Q1 ) ×( Q2 - Q1 ) * ( Q2 - Q1 ) ×( P2 - Q1 ) >= 0。

exercise1_ACM

exercise1_ACM

第一次作业1、平面分割方法设有n条封闭曲线画在平面上,而任何两条封闭曲线恰好相交于两点,且任何三条封闭曲线不相交于同一点,问这些封闭曲线把平面分割成的区域个数。

输入示例:3输出示例:8要求:用两种方法:(1)得到第n项与其之前已知项之间的关系,程序用递归实现(2)得到第n项的通项公式,程序直接实现。

解:每增加一条封闭曲线该曲线就会与之前的每条曲线产生两个交点,所以会增加2(n-1)个交点。

(1)递归关系:f(n)=f(n-1)+2(n-1)(增加几个交点就增加几个平面),f(1)=2 (2)通项公式:f(n)=n(n-1)+2//(1)//平面分割方法int countArea(int n)//递归法{if(n==1)return 2;elsereturn countArea(n-1)+2*(n-1);}//通项公式法an=2+n(n-1)int countArea2(int n){return 2+n*(n-1);}2、LELE的RPG难题有排成一行的n个方格,用红(Red)、粉(Pink)、绿(Green)三色涂每个格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色.求全部的满足要求的涂法.输入示例:3输出示例:6解:递归分析:从f(n-1)增加到f(n)分两种情况:(1)一种是直接在所有已经排好了的f(n-1)序列中插入唯一一个第三色有f(n-1)种;(2)另外是在已经排好了的f(n-2)序列中,插入与缝隙两边其中一个颜色相同的颜色,然后再插入第n个颜色且只需与第n-1种颜色不同有两种,故有2f(n-2)种;递归关系:f(n)=f(n-1)+2f(n-2),(n>=2)//(2)LELE的RPG难题int countColor(int n){if(n==2)return 6;else if(n==3)return 6;elsereturn countColor(n-1)+*countColor(n-2);}3、假设一个有序数组A[0], A[1], …, A[N-1],编写一个函数int find(int A[], int x),确定一个整数x是否在数组A中,如果在,则返回其位置,否则返回-1//有序数组元素查找-二分查找int find(int A[],int n){//sizeof(A)sizeof写进函数得不到数组所占的内存数,而仅是一个指针的内存大小 int length=0;//参数数组长度for(int i=0;A[i]!=0;i++){length++;}int left=0,mid,right=length-1;while(left<=right){mid=(left+right)/2;if(n<A[mid])right=mid-1;else if(n>A[mid]){left=mid+1;}elsereturn mid;}return -1;}4、假设数组a中的元素是按从小到大顺序排列的,函数find(int a[], int n, int &i, int &j, int x)利用二分搜索法确定x是否在含有n个元素的数组a中,如果不在,则参数i为小于x的最大元素的下标,参数j为大于x的最小元素的下标。

北师大专题17 线段中点或角的计数问题含答案

北师大专题17 线段中点或角的计数问题含答案

专题17 线段中点或角的计数问题一、线段中点问题1. 如图,点C为线段AB上一点,AC=8cm,CB=6cm,点M、N分别是AC、BC的中点.(1)求线段MN的长;(2)若AC+BC=acm,其他条件不变,直接写出线段MN的长为.【答案】(1)7cm;(2)12a cm.【解析】【分析】(1)根据线段中点的性质(可得CM(CN的长(根据线段的和差(可得答案((2)根据线段中点的性质(可得CM(CN的长(根据线段的和差(可得答案(【详解】(1(∵点M(N分别是AC(BC的中点(AC=8(CB=6(∴CM=12AC=12×8=4(CN=12BC=12×6=3(∴MN=CM+CN=4+3=7cm((2(∵点M(N分别是AC(BC的中点(∴CM=12AC(CN=12BC(∴MN=CM+CN=1 2AC+12BC=12(AC+BC(=12AB=12a(cm((故答案为12a cm(【点睛】本题考查了两点间的距离(连接两点间的线段的长度叫两点间的距离(2. 画线段MN=3㎝,在线段MN上取一点Q,使MQ=NQ,延长线段MN至点A,使AN=MN;延长线段NM至点B,使BN=3BM,根据所画图形计算:(1)线段BM的长度;(2)线段AN的长度;(3)试说明Q是哪些线段的中点?图中共有多少条线段?它们分别是?【答案】(1)1.5㎝;(2)1.5㎝;(3)由图可知,BM=MQ=NQ=NA所以Q既是线段MN的中点,也是线段AB的中点.图中共有10条线段,它们分别是:BM、BQ、BN、BA、MQ、MN、MA、QN、QA、NA.【解析】【分析】先根据题意画出几何图形(1)根据BN=3BM可得到MN=2BM,而MN=3cm,即可得到线段BM的长;(2)根据AN=12MN即可得到线段AN的长;(3)由(1)与(2)得到BM=MQ=NQ=NA,即QB=QA,QM=QN,则点Q是线段MN的中点,也是线段AB的中点;图形中共有BM、BQ、BN、BA、MQ、MN、MA、QN、QA、NA10条线段.【详解】如图所示:(1)(MN=3cm,BN=3BM,(BM=12MN=12×3=1.5(cm );(2)(MN=3cm,AN=12 MN(AN=1.5cm;(3)由图可知,BM=MQ=NQ=NA,(QB=QA,QM=QN,(点Q既是线段MN的中点,也是线段AB的中点;图中共有10条线段,它们分别是:BM、BQ、BN、BA、MQ、MN、MA、QN、QA、NA.【点睛】本题考查了两点间的距离、射线与线段的定义,解题的关键是熟记两点间的距离的定义:两点的连线段的长叫两点间的距离.二、线段分点问题3. 如图,B,C两点把线段AD分成2∶4∶3的三部分,M是线段AD的中点,CD =6 cm,求线段MC的长.【答案】3cm【解析】【分析】设AB=2x,BC=4x,CD=3x,再根据CD=6cm求出x的值,故可得出线段AD的长度,再根据M是AD的中点可求出MD的长,由MC=MD-CD即可得出结论.【详解】解:∵B,C两点把线段AD分成2:4:3三部分,∴设AB=2x,BC=4x,CD=3x,∵CD=6cm,即3x=6cm,解得x=2cm,∴AD=2x+4x+3x=9x=9×2=18cm,∵M是AD的中点,∴MD=12AD=12×18=9cm,∴MC=MD-CD=9-6=3cm.【点睛】本题考查的是两点间的距离,在解答此类问题时要注意各线段之间的和、差及倍数关系.4. A,B两点在数轴上的位置如图所示,O为原点,现A,B两点分别以1个单位长度/秒的速度同时向左运动.(1)几秒后,原点恰好在A,B两点正中间?(2)几秒后,恰好有OA:OB=1:2.【答案】(1)95(1.8)秒;(2)1或9秒.【解析】【分析】(1)根据原点恰好在两点正中间,分别表示出原点两旁的长度求出即可;(2)利用①B与A相遇前,②B与A相遇后分别表示出线段长度得出等式即可.【详解】(1)设运动时间为x秒,根据题意得出:x+3=12-4x,解得:x=1.8,答:1.8秒后,原点恰好在两点正中间;(2)设运动时间为x秒,分两种情况:①B与A相遇前:12-4x=2(x+3),解得:x=1,②B与A相遇后:4x-12=2(x+3),解得:x=9,答:1秒或9秒后,恰好有OA:OB=1:2.【点睛】此题主要考查了一元一次方程的应用,利用分类讨论得出是解题关键.三、线段条数的计数问题5. 先阅读文字,再解答问题.如图,在一条直线上取两点,可以得到1条线段,在一条直线上取三点可以得到3条线段,其中以A 1为端点的向右的线段有2条,以A 2为端点的向右的线段有1条,所以共有2+1=3(条).(1)在一条直线上取四个点,以A 1为端点的向右的线段有______条,以A 2为端点的向右的线段有______条,以A 3为端点的向右的线段有______条,共有______+______+______=______(条).(2)在一条直线上取五个点,以A 1为端点的向右的线段有______条,以A 2为端点的向右的线段有________条,以A 3为端点的向右的线段有________条,以A 4为端点的向右的线段有______条,共有________+________+________+________=______(条).(3)在一条直线上取n 个点(n≥2),共有________条线段.(4)乘火车从A 站出发,沿途经过5个车站方可到达B 站,那么A ,B 两站之间最多有多少种不同的票价?需要安排多少种不同的车票?(只考虑硬座情况) 【答案】(1)3;2;1;3;2;1;6;(2)4;3;2;1;4;3;2;1;10;(3)(1)2n n -;(4)21种;42种 【解析】【分析】(1)分别找出以A 1,A 2,A 3为端点向右的线段数,再求和即可得到结论; (2)分别找出以A 1,A 2,A 3,A 4为端点向右的线段数,再求和即可得到结论; (3)由前面的规律可看出,当直线上有n 个点时,线段总数为(1)2n n -; (4)画出图形,结合图形,表示出线段的条数,就可以知道车票的种数,从而可得结论.【详解】解:(1)在一条直线上取四个点,如图以A 1为端点的向右的线段有12A A ,13A A ,41A A 共3条,以A 2为端点的向右的线段有23A A ,24A A 共2条,以A 3为端点的向右的线段有34A A ,1条,共有3+2+1=6(条).(2)在一条直线上取五个点,如图,以A 1为端点的向右的线段有12A A ,13A A ,41A A ,15A A 共4条,以A 2为端点的向右的线段有23A A ,24A A ,25A A 共3条,以A 3为端点的向右的线段有34A A ,35A A ,共2条,以A 4为端点的向右的线段有45A A ,1条,共有4+3+2+1=10(条).(3)在一条直线上取n 个点(n≥2),共有(1)2n n -条线段. (4)从A 站出发,沿途经过5个车站到达B 站,类似于一条直线上有7个点,如图,此时共有线段7(71)2⨯-=21(条),即A ,B 两站之间最多有21种不同的票价.因为来往两站的车票起点与终点不同,所以A ,B 两站之间需要安排21×2=42(种)不同的车票.【点睛】此题主要考查学生数线段条数及规律型题的掌握情况,找到线段条数与直线上点的个数之间的联系,是解题的关键.四、平面内直线相交所得交点与平面的计数问题6. 为了探究同一平面内的几条直线相交最多能产生多少个交点,能把平面最多分成几部分,我们从最简单的情形入手,如图.列表如下:(1)当直线条数为5时,最多有________个交点,可写成和的形式为________;把平面最多分成______部分,可写成和的形式为________.(2)当直线条数为10时,最多有________个交点,把平面最多分成________部分. (3)当直线条数为n 时,最多有多少个交点?把平面最多分成多少部分? 【答案】(1)10;1+2+3+4;16;1+1+2+3+4+5 (2)45;56;(3)(1)2n n -;n(n 1)12+⎡⎤+⎢⎥⎣⎦ 【解析】【分析】(1)两条直线只有一个交点,第3条直线和前两条直线都相交,增加了2个交点,得1+2, 第4条直线和前3条直线都相交,增加了3个交点,得1+2+3, 第5条直线和前4条直线都相交,增加了4个交点,得1+2+3+4, 可得,n 条直线两两相交,最多有(1)2n n -个交点(n 为正整数,且n≥2). 一条直线把平面分成2部分,两条直线把平面分成2+2=4部分,三条直线把平面分成2+2+3=7部分,四条直线把平面分成2+2+3+4=11部分,五条直线把平面分成2+2+3+4+5=16部分,即n 条直线把平面分成2+2+3+4+5+…=1+1+2+3+…+n=1+(+1)2n n 部分 (2)代入(1)中的规律可得结果; (3)由(1)可得结论.【详解】解:(1)两条直线只有一个交点,第3条直线和前两条直线都相交,增加了2个交点,得1+2,第4条直线和前3条直线都相交,增加了3个交点,得1+2+3=4(41)2⨯-=6, 第5条直线和前4条直线都相交,增加了4个交点,得1+2+3+45(51)=2⨯-=10,∴可得,n 条直线两两相交,最多有(1)2n n -个交点(n 为正整数,且n≥2). 一条直线把平面分成2部分, 两条直线把平面分成2+2=4部分,三条直线把平面分成2+2+3=7部分, 四条直线把平面分成2+2+3+4=11部分, 五条直线把平面分成2+2+3+4+5=16部分,∴n 条直线把平面分成2+2+3+4+5+…=1+1+2+3+…+n=[1+(+1)2n n ]部分 (2)当n=10时,最多有10(101)=452⨯-个交点,把平面最多分成1+10(10+1)=562⨯部分. (3)当直线条数为n 时, 最多有1+2+3+…+(n -1)=(1)2n n -个交点; 把平面最多分成1+1+2+3+…+n =(1)12n n +⎡⎤+⎢⎥⎣⎦部分. 【点睛】本题考查的是多条直线相交的交点问题,解答此题的关键是找出规律,即n 条直线相交有(1)2n n -个交点.本题体现了由“特殊到一般再到特殊”的思维过程,有利于培养同学们的探究意识.五、关于角的个数的计数问题7. 有公共端点的两条射线组成的图形叫做角,这个公共端点叫做角的顶点,如图,如果过角的顶点A ,(1)在角的内部作一条射线,那么图中一共有几个角? (2)在角的内部作两条射线,那么图中一共有几个角? (3)在角的内部作三条射线,那么图中一共有几个角? (4)在角的内部作n 条射线,那么图中一共有几个角?【答案】(1)3;(2)6;(3)10;(4)(1)(2)2n n ++【解析】【分析】(1)根据图形判断即可;(2)根据图形可判断出在(1)的基础上再增加一条射线,则增加3个角,进行计算即可;(3)根据图形判断在(2)的基础上再增加一条射线,则增加4个角,进行计算即可;(4)根据前面结论进行总结即可.【详解】解:(1)如题图①,已知∠BAC ,如果在其内部作一条射线,显然这条射线就会和∠BAC 的两条边都组成一个角,这样一共就有1+2=3(个)角; (2)题图①中有1+2=3(个)角,如果再在题图①的角的内部增加一条射线,即为题图②,显然这条射线就会和图中的三条射线再组成三个角,则题图②中一共有1+2+3=6(个)角;(3)如题图③,在角的内部作三条射线,即在题图②中再增加一条射线,同样这条射线就会和图中的四条射线再组成四个角,即题图③中一共有1+2+3+4=10(个)角;(4)由(1)、(2)、(3)可知:在角的内部作一条射线,一共有1+2=3(个)角, 在角的内部作两条射线,一共有1+2+3=6(个)角, 在角的内部作三条射线,一共有1+2+3+4=10(个)角,所以如果在一个角的内部作n 条射线,则图中一共有1+2+3+…+n +(n +1)=(1)(2)2n n ++ (个)角.【点睛】本题考查了角的计数,通过观察,正确归纳总结出规律是解题关键.。

ACM校赛比赛题目及分析

ACM校赛比赛题目及分析

Problem A -- 超级难题Time Limit:1000ms Memory Limit:65535KBDescriptionACM程序设计大赛是大学级别最高的脑力竞赛,素来被冠以"程序设计的奥林匹克"的尊称。

大赛自1970年开始至今已有30年历史,是世界范围内历史最悠久、规模最大的程序设计竞赛。

比赛形式是:经过校级和地区级选拔的参赛组,于指定的时间、地点参加世界级的决赛,由3个成员组成的小组应用一台计算机解决6到8个生活中的实际问题。

参赛队员必须在5小时内编完程序并进行测试和调试。

此种大赛对参赛学生的逻辑分析能力、策略制定和脑力方面具有极大的挑战性。

大赛提倡在压力较大的情况下,培养学生的创造力、团队合作精神以解决竞赛的问题,从而挑选和发掘世界上最优秀的程序设计人才竞赛的历史可以上溯到1970年,当时在美国德克萨斯A&M大学举办了首届比赛。

当时的主办方是the Alpha Chapter of the UPE Computer Science Honor Society。

作为一种全新的发现和培养计算机科学顶尖学生的方式,竞赛很快得到美国和加拿大各大学的积极响应。

1977年,在ACM计算机科学会议期间举办了首次总决赛,并演变成为目前的一年一届的多国参与的国际性比赛。

迄今已经举办了29届ACM/ICPC以团队的形式代表各学校参赛,每队由3名队员组成。

每位队员必须是入校5年内的在校学生。

比赛期间,每队使用1台电脑需要在5个小时内使用C、C++、Pascal或Java中的一种编写程序解决8或10个问题。

程序完成之后提交裁判运行,并把运行结果及时通知参赛队。

而且有趣的是每队在正确完成一题后,组织者将在其位置上升起一只代表该题颜色的气球2009年的时候队伍A参加了ACM的区域赛,那次区域赛比赛总共有N个题,队伍A做了N个题中的M个。

队伍A 做第一题所用的时间为T1分钟,做第一题所用的时间为T2分钟,.......做第M题所用的时间为Tm分钟。

ACM题库完整版

ACM题库完整版

#include<stdio.h> int type(int); char week[7][10]={"saturday","sunday","monday","tuesday","wednesday","thursday","friday"}; int year[2]={365,366}; int month[2][12]={31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31}; int main(void) { int days,dayofweek; int i=0,j=0; while(scanf("%d",&days)&&days!=-1) { dayofweek=days%7; for(i=2000;days>=year[type(i)];i++) days-=year[type(i)]; for(j=0;days>=month[type(i)][j];j++) days-=month[type(i)][j]; printf("%d-%02d-%02d%s\n",i,j+1,days+1,week[dayofweek]); } return 0; } int type(int m) { if(m%4!=0||(m%100==0&&m%400!=0)) return 0; else return 1; }
构造新的模运算
1.题目描述 给定整数a,b,n,要求计算(a^b)mod n 2.输入 多组数据;=a<=40,0<=b<=3,1<=n<=500 3.输出 每组数据输出一行,为所求值 4.样例输入 #include<stdio.h> 235 224 #include<math.h> 5.样例输出 int main() 3 { 0

高中数学选择性必修一:1.4.2 空间中的距离问题精选考点提升训练

高中数学选择性必修一:1.4.2 空间中的距离问题精选考点提升训练

第一章 1.4.2 空间中的距离问题A 级——基础过关练1.若O 为坐标原点,OA →=(1,1,-2),OB →=(3,2,8),OC →=(0,1,0),则线段AB 的中点P 到点C 的距离为( )A .1652B .214C .53D .532【答案】D 【解析】由题意OP →=12((OA →+OB →()=⎝⎛⎭⎫2,32,3,PC →=OC →-OP →=⎝⎛⎭⎫-2,-12,-3,|PC →|=4+14+9=532. 2.(2021年太原月考)已知在正三棱锥P -ABC 中,三条侧棱两两互相垂直,侧棱长为a ,则点P 到平面ABC 的距离为( )A .aB .22a C .33a D .3a【答案】C 【解析】由题意得P A ,PB ,PC 两两垂直,且P A =PB =PC =a ,建立空间直角坐标系如图所示,则P (0,0,0),A (a,0,0),B (0,a,0),C (0,0,a ),于是P A →=(a,0,0),AB →=(-a ,a,0),AC →=(-a,0,a ),设平面ABC 的法向量n =(x ,y ,z ),则⎩⎪⎨⎪⎧n ·AB →=0,n ·AC →=0,即⎩⎪⎨⎪⎧-ax +ay =0,-ax +az =0,令x =1,则y =z =1,所以平面ABC 的一个法向量n =(1,1,1),所以点P 到平面ABC 的距离d =|P A →·n ||n |=a 3=33a .3.已知平面α过点A (1,-1,2),和α垂直的一个向量为n =(-3,0,4),则P (3,5,0)到α的距离为( )A .145B .2C .3D .125【答案】A 【解析】因为P A →=(-2,-6,2),所以P A →·n =(-2,-6,2)·(-3,0,4)=14,|n |=-32+42=5.所以点P 到平面α的距离为|P A →·n ||n |=145.4.如图,在正方体ABCD -A 1B 1C 1D 1中,P 为对角线BD 1的三等分点,P 到各顶点的距离的不同取值有( )A .1个B .2个C .3个D .4个【答案】D 【解析】建立如图所示的空间直角坐标系,不妨设正方体的棱长|AB |=3,则A (3,0,0),B (3,3,0),C (0,3,0),D (0,0,0),A 1(3,0,3),B 1(3,3,3),C 1(0,3,3),D 1(0,0,3),所以BD 1→=(-3,-3,3),设P (x ,y ,z ),因为BP →=13BD 1→=(-1,-1,1),所以DP →=DB →+(-1,-1,1)=(2,2,1).所以|P A |=|PC |=|PB 1|=12+22+12=6,|PD |=|P A 1|=|PC 1|=22+22+12=3,|PB |=3,|PD 1|=22+22+22=2 3.故P 到各顶点的距离的不同取值有6,3,3,23,共4个.5.(2021年张掖质检)如图,在正三棱柱ABC -A 1B 1C 1中,若AB =AA 1=4,点D 是AA 1的中点,则点A 1到平面DBC 1的距离是________.【答案】2 【解析】以AC 为y 轴,以AA 1为z 轴,建立如图所示的空间直角坐标系,因为正三棱柱ABC -A 1B 1C 1中,AB =AA 1=4,点D 是AA 1的中点,所以B (23,2,0),C 1(0,4,4),D (0,0,2),A 1(0,0,4),所以DB →=(23,2,-2),DC 1→=(0,4,2),DA 1→=(0,0,2),设平面BDC 1的法向量n =(x ,y ,z ),因为n ·DB →=0,n ·DC 1→=0,所以⎩⎨⎧23x +2y -2z =0,4y +2z =0,取x =3,所以n =(3,-1,2),所以点A 1到平面DBC 1的距离d =|n ·DA 1→||n |=|0+0+4|3+1+4= 2.6.在空间直角坐标系Oxyz 中,平面OAB 的一个法向量为n =(2,-2,1),已知点P (-1,3,2),则点P 到平面OAB 的距离d 等于________.【答案】2 【解析】点P 到平面OAB 的距离d =|OP →·n ||n |=|-1,3,2·2,-2,1|22+-22+12=63=2. 7.(2021年衡水模拟)已知直三棱柱ABC -A 1B 1C 1中,∠ABC =90°,AC =AA 1=22,AB =2,M 为BB 1的中点,则点B 1与平面ACM 的距离为__________.【答案】1 【解析】因为AB =2,AC =22,∠ABC =90°,所以BC =AC 2-AB 2=8-4=2,建立空间直角坐标系如图,则A (2,0,0),B (0,0,0),C (0,2,0),B 1(0,0,22),M (0,0,2),所以AC →=(-2,2,0),AM →=(-2,0,2),B 1M →=(0,0,-2(),设n =(x ,y ,z )是平面ACM 的一个法向量,则⎩⎪⎨⎪⎧n ·AC →=0,n ·AM →=0,所以⎩⎨⎧ -2x +2y =0,-2x +2z =0,即⎩⎨⎧y =x ,z =2x ,令x =1,则y =1,z =2,所以平面ACM 的一个法向量n =(1,1,2),所以B 1与平面ACM 的距离d =|B 1M →·n ||n |=|0×1+0×1+-2×2|12+12+22=1.8.在长方体ABCD -A 1B 1C 1D 1中,已知AA 1=9,BC =63,N 为BC 的中点,则直线D 1C 1到平面A 1B 1N 的距离是__________.【答案】9 【解析】如图,建立空间直角坐标系,设CD =a ,则D 1(0,0,9),A 1(63,0,9),B 1(63,a,9),N (33,a,0),所以D 1A 1→=(63,0,0),A 1B 1→=(0,a,0),B 1N →=(-33,0,-9).设平面A 1B 1N 的法向量n =(x ,y ,z ),则⎩⎪⎨⎪⎧n ·A 1B 1→=0,n ·B 1N →=0,即⎩⎨⎧ay =0,-33x -9z =0,取x =3,则y =0,z =-3,所以平面A 1B 1N 的一个法向量为(3,0,-3).所以点D 1到平面A 1B 1N 的距离d =|D 1A 1→·n ||n |=18323=9.又因为D 1C 1∥平面A 1B 1N ,所以直线D 1C 1与平面A 1B 1N 的距离仍是9.9.如图,BD ⊥平面ABC ,AE ∥BD ,AB =BC =CA =BD =2AE =2,F 为CD 中点. (1)求证:EF ⊥平面BCD ; (2)求点A 到平面CDE 的距离.(1)证明:如图,取BC 中点G 点,连接AG ,FG .因为F ,G 分别为DC ,BC 中点, 所以FG ∥BD 且FG =12BD .又AE ∥BD 且AE =12BD ,所以AE ∥FG 且AE =FG ,所以四边形EFGA 为平行四边形,则EF ∥AG . 因为BD ⊥平面ABC ,所以BD ⊥AG . 因为G 为BC 中点,且AC =AB , 所以AG ⊥BC .又因为BD ∩BC =B ,所以AG ⊥平面BCD . 所以EF ⊥平面BCD .(2)解:如图,取AB 的中点O 和DE 的中点H ,分别以OC →,OB →,OH →所在直线为x 轴、y 轴、z 轴建立如图所示空间直角坐标系,则C (3,0,0),D (0,1,2),E (0,-1,1),A (0,-1,0),CD →=(-3,1,2),ED →=(0,2,1).设平面CDE 的法向量n 1=(x ,y ,z ), 则⎩⎪⎨⎪⎧n 1·CD →=-3x +y +2z =0,n 1·ED →=2y +z =0,取n 1=(3,-1,2),AE →=(0,0,1), 点A 到平面CDE 的距离d =|AE →·n 1||n 1|=22.10.如图,在平行四边形ABCD 中,AB =4,BC =22,∠ABC =45°,E 是CD 边的中点,将△DAE 沿AE 折起,使点D 到达点P 的位置,且PB =2 6.(1)求证:平面P AE ⊥平面ABCE ; (2)求点E 到平面P AB 的距离.(1)证明:∵在平行四边形ABCD 中,AB =4,BC =22,∠ABC =45°, E 是CD 边的中点,将△DAE 沿AE 折起, 使点D 到达点P 的位置,且PB =26, ∴AE =222+22-2×22×2×cos(45°=2.∴AE 2+ED 2=AD 2.∴∠AED =90°.∴AE ⊥AB . ∵AB 2+P A 2=PB 2,∴AB ⊥P A . ∵AE ∩P A =A ,∴AB ⊥平面P AE .∵AB ⊂平面ABCE ,∴平面P AE ⊥平面ABCE .(2)解:∵AE =2,DE =2,P A =22, ∴P A 2=AE 2+PE 2.∴AE ⊥PE . ∵AB ⊥平面P AE ,AB ∥CE ,∴CE ⊥平面P AE .∴EA ,EC ,EP 两两垂直.以E 为原点,EA ,EC ,EP 为x 轴、y 轴、z 轴,建立空间直角坐标系, 则E (0,0,0),A (2,0,0),B (2,4,0),P (0,0,2),PE →=(0,0,-2),P A →=(2,0,-2),PB →=(2,4,-2). 设平面P AB 的法向量n =(x ,y ,z ), 则⎩⎪⎨⎪⎧n ·P A →=2x -2z =0,n ·PB →=2x +4y -2z =0,取x =1,得n =(1,0,1),∴点E 到平面P AB 的距离d =|PE →·n ||n |=22= 2.B 级——能力提升练11.在棱长为1的正方体ABCD -A 1B 1C 1D 1的面A 1B 1C 1D 1上取一点E ,使∠EAB =∠EAD =60°,则线段AE 的长为( )A .52B .62C .2D .3【答案】C 【解析】建立如图所示的空间直角坐标系,则A (0,0,0),B (1,0,0),D (0,1,0),设E (x ,y,1),故cos ∠EAB =AE →·AB →|AE →||AB →|=x x 2+y 2+1=12,cos ∠EAD =AE →·AD →|AE →||AD →|=y x 2+y 2+1=12(.于是x =y =22,故|AE →(|=12+12+1= 2. 12.如图,四棱锥P -ABCD 中,底面ABCD 为矩形,P A ⊥底面ABCD ,P A =AB =2,|AD →|=1,E 是棱PB 的中点.直线AB 与平面ECD 的距离为( )A .1B .33C .83D .2【答案】B 【解析】如图,以A 为坐标原点,射线AB ,AD ,AP 分别为x 轴、y 轴、z 轴的正半轴,建立空间直角坐标系,则B (2,0,0),P (0,0,2),E ⎝⎛⎭⎫22,0,22.由|AD →|=1,得D (0,1,0),C (2,1,0),从而DC →=(2,0,0),DE →=⎝⎛⎭⎫22,-1,22,AE→=⎝⎛⎭⎫22,0,22,设平面DEC 的法向量n =(x ,y ,z ),则n ·DC →=0,n ·DE →=0.故⎩⎪⎨⎪⎧2x =0,22x -y +22z =0,所以x =0,z =2y .可取y =1,则n =(0,1,2).故点A 到平面ECD 的距离d =|AE →·n ||n |=13=33.又直线AB ∥平面ECD ,所以直线AB 到平面ECD 的距离为33. 13.如图,A 是正方形BCDE 外一点,AE ⊥平面BCDE ,且AE =CD =a ,G ,H 分别是BE ,ED 的中点,则GH 到平面ABD 的距离是________.【答案】36a【解析】如图,由题意知,GH∥平面ABD,以E为坐标原点,分别以EB,ED,EA为x轴、y轴、z轴建立空间直角坐标系,则E(0,0,0),G⎝⎛⎭⎫a2,0,0,H⎝⎛⎭⎫0,a2,0,A(0,0,a),B(a,0,0),D(0,a,0).设面ABD的法向量n=(x,y,z),则⎩⎪⎨⎪⎧n·AB→=ax-az=0,n·AD→=ay-az=0,所以x=y=z.所以可取n=(1,1,1).又GB→=⎝⎛⎭⎫a2,0,0,所以由公式得d=|GB→·n||n|=a23=36a.又GH∥平面ABD,所以直线GH到平面ABD 的距离是36a.14.如图,正三棱锥S-ABC的高SO=2,侧棱SC与底面成45°角,则点C到侧面SAB 的距离是________.【答案】655【解析】如图,建立空间直角坐标系,在Rt△SOC中,SO=2,∠SCO=45°,所以OC=2,AB=BC=AC=23,所以S(0,0,2),A(-1,-3,0),B(-1,3,0),C(2,0,0),所以SA→=(-1,-3,-2),AB→=(0,23,0),SC→=(2,0,-2).设平面SAB的法向量n=(x,y,z),则⎩⎪⎨⎪⎧n·SA→=0,n·AB→=0,得⎩⎨⎧-x-3y-2z=0,23y=0,取z=1,则x=-2,y=0,所以平面SAB的一个法向量n=(-2,0,1),d=|SC→·n||n|=|-4-2|5=655.所以点C到侧面SAB的距离为65 5.15.如图,四面体ABCD中,AB,BC,BD两两垂直,AB=BC=BD=4,E,F分别为棱BC,AD的中点.(1)求异面直线AB与EF所成角的余弦值;(2)求点E到平面ACD的距离.解:如图,分别以直线BC ,BD ,BA 为x 轴、y 轴、z 轴建立空间直角坐标系,则各相关点的坐标为A (0,0,4),C (4,0,0),D (0,4,0),E (2,0,0),F (0,2,2). (1)因为AB →=(0,0,-4),EF →=(-2,2,2), 所以|cos 〈AB →,EF →〉|=⎪⎪⎪⎪⎪⎪-84×23=33.所以异面直线AB 与EF 所成角的余弦值为33. (2)设平面ACD 的一个法向量n =(x ,y ,z ), 由AC →=(4,0,-4),CD →=(-4,4,0),则⎩⎪⎨⎪⎧n ·AC →=0,n ·CD →=0,所以⎩⎪⎨⎪⎧4x -4z =0,-4x +4y =0.所以x =y =z ,取n =(1,1,1).所以E 到平面ACD 的距离为d =|n ·EF →||n |=23=233.C 级——探究创新练16.已知圆柱OO 1底面半径为1,高为π,ABCD 是圆柱的一个轴截面,动点M 从点B 出发沿着圆柱的侧面到达点D ,其距离最短时在侧面留下的曲线L 如图所示.将轴截面ABCD 绕着轴OO 1逆时针旋转θ(0<θ<π)后,边B 1C 1与曲线L 相交于点P .(1)求曲线L 的长度为________;(2)当θ=π2时,则点C 1到平面APB 的距离为______.【答案】(1)2π (2)ππ2+4π2+4【解析】(1)曲线L 的长度为矩形的对角线长度.其中矩形的宽为圆柱的高,长为底面的半圆长,其中AD =π,底面的半圆长为12×π×2×1=π.∴曲线L 的长为2π.(2)当θ=π2时,建立如图所示的空间直角坐标系:则有A (0,-1,0),B (0,1,0),P ⎝⎛⎭⎫-1,0,π2,C 1(-1,0,π), 所以AB →=(0,2,0),AP →=⎝⎛⎭⎫-1,1,π2,OC 1→=(-1,0,π). 设平面ABP 的法向量n =(x ,y ,z ), 则⎩⎪⎨⎪⎧ n ·AB →=0,n ·AP →=0,代入可得⎩⎪⎨⎪⎧2y =0,-x +y +π2z =0, 令z =2,得n =(π,0,2), 所以点C 1到平面P AB 的距离为 d =|OC 1→·n ||n |=ππ2+4=ππ2+4π2+4.17.如图,在直三棱柱ABC -A 1B 1C 1中,∠ABC =90°,BC =2,CC 1=4,点E 在棱BB 1上,EB 1=1,D ,F ,G 分别为CC 1,B 1C 1,A 1C 1的中点,EF 与B 1D 相交于点H .(1)求证:B 1D ⊥平面ABD ;(2)求证:平面EGF ∥平面ABD ; (3)求平面EGF 与平面ABD 的距离.(1)证明:如图所示,建立空间直角坐标系,设AB =a ,则A 1(a,0,0),B 1(0,0,0),C 1(0,2,0),F (0,1,0),E (0,0,1),A (a ,0,4),B (0,0,4),D (0,2,2),G ⎝⎛⎭⎫a 2,1,0.所以B 1D →=(0,2,2),AB →=(-a,0,0),BD →=(0,2,-2). 所以B 1D →·AB →=0+0+0=0,B 1D →·BD →=0+4-4=0. 所以B 1D →⊥AB →,B 1D →⊥BD →, 所以B 1D ⊥AB ,B 1D ⊥BD .又AB ∩BD =B ,所以B 1D ⊥平面ABD .(2)证明:由(1)可得AB →=(-a,0,0),BD →=(0,2,-2),GF →=⎝⎛⎭⎫-a 2,0,0,EF →=(0,1,-1), 所以AB →=2GF →,BD →=2EF →,所以GF →∥AB →,EF →∥BD →. 所以GF ∥AB ,EF ∥BD . 又GF ∩EF =F ,AB ∩BD =B , 所以平面EGF ∥平面ABD .(3)解:由(1)(2)知,B 1D →是平面EGF 和平面ABD 的法向量.因为平面EGF ∥平面ABD ,所以点E 到平面ABD 的距离就是两平面的距离,设为d . 因为EB →=(0,0,3),B 1D →=(0,2,2), 所以d =|B 1D →·EB →||B 1D →|=622+22=322.即平面EGF 与平面ABD 的距离为322.。

Acm试题及答案

Acm试题及答案

Acm试题及答案Acm试题及答案1001 Sum Problem (2)1089 A+B for Input-Output Practice (I) (3) 1090 A+B for Input-Output Practice (II) (4) 1091A+B for Input-Output Practice (III) (6) 1092A+B for Input-Output Practice (IV) (7) 1093 A+B for Input-Output Practice (V) (9) 1094 A+B for Input-Output Practice (VI) (11) 1095A+B for Input-Output Practice (VII) (12) 1096 A+B for Input-Output Practice (VIII) (14) 2000 ASCII码排序 (15)2001计算两点间的距离 (16)2002计算球体积 (17)2003求绝对值 (18)2004成绩转换 (19)2005第几天? (20)2006求奇数的乘积 (22)2007平方和与立方和 (23)2008数值统计 (24)2009求数列的和 (25)2010水仙花数 (27)2011多项式求和 (28)2012素数判定 (29)2014青年歌手大奖赛_评委会打分 (31)2015偶数求和 (32)2016数据的交换输出 (34)2017字符串统计 (35)2019数列有序! (37)2020绝对值排序 (38)2021发工资咯:) (40)2033人见人爱A+B (41)2039三角形 (43)2040亲和数 (44)1001 Sum ProblemProblem DescriptionHey, welcome to HDOJ(Hangzhou Dianzi University Online Judge).In this problem, your task is to calculate SUM(n) = 1 + 2 + 3 + ... + n.InputThe input will consist of a series of integers n, one integer per line.OutputFor each case, output SUM(n) in one line, followed by a blank line. You may assume the result will be in the range of 32-bit signed integer.Sample Input1100Sample Output15050AuthorDOOM III解答:#includemain(){int n,i,sum;sum=0;while((scanf("%d",&n)!=-1)){sum=0;for(i=0;i<=n;i++)sum+=i;printf("%d\n\n",sum);}}1089 A+B for Input-Output Practice(I)Problem DescriptionYour task is to Calculate a + b.Too easy?! Of course! I specially designed the problem for acm beginners.You must have found that some problems have the same titles with this one, yes, all these problems were designed for the same aim.InputThe input will consist of a series of pairs of integers a and b, separated by a space, one pair of integers per line.OutputFor each pair of input integers a and b you should output the sum of a and b in one line, and with one line of output for each line in input.Sample Input1 510 20Sample Output630AuthorlcyRecommendJGShining解答:#includemain(){int a,b;while(scanf("%d%d",&a,&b)!=EOF)printf("%d\n",a+b);}1090 A+B for Input-Output Practice(II)Problem DescriptionYour task is to Calculate a + b.InputInput contains an integer N in the first line, and then N lines follow. Each line consists of a pair of integers a and b, separated by a space, one pair of integers per line.OutputFor each pair of input integers a and b you should output the sum of a and b in one line, and with one line of output for each line in input.Sample Input21 510 20Sample Output630AuthorlcyRecommendJGShining解答:#include#define M 1000void main(){int a ,b,n,j[M],i;//printf("please input n:\n");scanf("%d",&n);for(i=0;i<n;i++)< bdsfid="216" p=""></n;i++)<> {scanf("%d%d",&a,&b);//printf("%d %d",a,b);j[i]=a+b;}i=0;while(i<n)< bdsfid="224" p=""></n)<>{printf("%d",j[i]); i++;printf("\n");}}1091A+B for Input-Output Practice (III) Problem DescriptionYour task is to Calculate a + b.InputInput contains multiple test cases. Each test case contains a pair of integers a and b, one pair of integers per line. A test case containing 0 0 terminates the input and this test case is not to be processed.OutputFor each pair of input integers a and b you should output the sum of a and b in one line, and with one line of output for each line in input.Sample Input1 510 200 0Sample Output630AuthorlcyRecommendJGShining解答:#includemain(){int a,b;scanf("%d %d",&a,&b);while(!(a==0&&b==0)){printf("%d\n",a+b);scanf("%d %d",&a,&b);}}1092A+B for Input-Output Practice (IV)Problem DescriptionYour task is to Calculate the sum of some integers.InputInput contains multiple test cases. Each test case contains a integer N, and then N integers followin the same line. A test case starting with 0 terminates the input and this test case is not to be processed.OutputFor each group of input integers you should output their sum in one line, and with one line of output for each line in input.Sample Input4 1 2 3 45 1 2 3 4 5Sample Output1015AuthorlcyRecommendJGShining解答:#includeint main(){int n,sum,i,t;while(scanf("%d",&n)!=EOF&&n!=0)sum=0;for(i=0;i<n;i++)< bdsfid="290" p=""></n;i++)<>{scanf("%d",&t);sum=sum+t;}printf("%d\n",sum); }1093 A+B for Input-Output Practice (V)Problem DescriptionYour task is to calculate the sum of some integers.InputInput contains an integer N in the first line, and then N lines follow. Each line starts with a integer M, and then M integers follow in the same line.OutputFor each group of input integers you should output their sum in one line, and with one line of output for each line in input.Sample Input24 1 2 3 45 1 2 3 4 5Sample Output1015Authorlcy解答:#includemain()int n,a,b,i,j,sum;sum=0;while(scanf("%d\n",&n)!=-1){for(i=0;i<n;i++)< bdsfid="322" p=""></n;i++)<>{scanf("%d",&b);for(j=0;j<b;j++)< bdsfid="326" p=""></b;j++)<>{scanf("%d",&a);sum+=a;}printf("%d\n",sum); sum=0;}}}1094 A+B for Input-Output Practice(VI)Problem DescriptionYour task is to calculate the sum of some integers.InputInput contains multiple test cases, and one case one line. Each case starts with an integer N, and then N integers follow in the same line.OutputFor each test case you should output the sum of N integers in one line, and with one line of output for each line in input.Sample Input4 1 2 3 45 1 2 3 4 5Sample Output1015AuthorlcyRecommendJGShining解答:#includemain(){int n,a,b,i,j,sum;sum=0;while(scanf("%d\n",&n)!=-1) {for(j=0;j<n;j++)< bdsfid="362" p=""></n;j++)<>{scanf("%d",&a);sum+=a;}printf("%d\n",sum); sum=0;}}1095A+B for Input-Output Practice (VII)Problem DescriptionYour task is to Calculate a + b.InputThe input will consist of a series of pairs of integers a and b, separated by a space, one pair of integers per line.OutputFor each pair of input integers a and b you should output the sum of a and b, and followed by a blank line.Sample Input1 510 20Sample Output630AuthorlcyRecommendJGShining解答:#includemain(){int a,b;while(scanf("%d%d",&a,&b)!=EOF)printf("%d\n\n",a+b);}1096 A+B for Input-Output Practice(VIII)Problem DescriptionYour task is to calculate the sum of some integers.InputInput contains an integer N in the first line, and then N lines follow. Each line starts with a integer M, and then M integers follow in the same line.OutputFor each group of input integers you should output their sumin one line, and you must note that there is a blank line between outputs.Sample Input34 1 2 3 45 1 2 3 4 53 1 2 3Sample Output10156AuthorlcyRecommendJGShining解答:int main(){int a,b,i,j,l[1000],k;scanf("%d",&i);getchar();for(j=1;j<=i;j++)l[j]=0;for(j=1;j<=i;j++){scanf("%d",&a);getchar();for(k=1;k<=a;k++){scanf("%d",&b);getchar();l[j]+=b;}}for(j=1;j<=i-1;j++)printf("%d\n\n",l[j]);printf("%d\n",l[i]);}2000 ASCII码排序Problem Description输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符。

郑州轻工业学院acm解析大全1300--1315

郑州轻工业学院acm解析大全1300--1315

1300整数a+b描述;计算两个整数的和,输入两个32位有符号的整数a,b,两个整数之间用空格隔开,输出为两个整数的和,单独占一行example 1 1 -2#include<stdio.h>int main(){int a,b,sum;scanf("%d%d",&a,&b);sum=a+b;printf("%d",sum);printf("\n");return 0;}1301求两个实数的绝对值描述;由键盘输入任意两个双精度数据,输出其平均值。

输出为一实数,保留两位小数,单独咱一行。

Example12.56 45.8929.23#include<stdio.h>int main(){double a,b,average;scanf("%lf%lf",&a,&b);average=(a+b)/2;printf("%.2lf",average);return 0;}补充;float表示为单精度,double表示为双精度,int表示定义的是整型;%.2lf表示的是保留两位小数%10d表示的是总共占有十个空格,右对齐,%f默认的是保留六位小数,1302温度转换描述;输入一个摄氏温度,要求输出华氏温度公式是f=1.8*c+32要求;输入一个双精度实数,输出数据小数点后面保留两位有效数字example 35 95.00#include<stdio.h>int main(){double c,f;scanf("%lf",&c);f=1.8*c+32;printf("%.2lf",f);return 0;}1303求等差数列的和描述;给出三个整数,分别表示第一项最后一项和公差,求改数列的和,注意;输入三个数中间用空格隔开。

C语言程序课程设计备选题目

C语言程序课程设计备选题目

封面作者:PanHongliang仅供个人学习说明:1题目来源是:(1)较重要C语言程序设计教科书中的例题或习题;(2)与计算机学科相关的后续课程,如数据结构、离散数学、组合数学、计算方法等课程教科书中的例题或习题中,不需要相关后续课程的专门知识就可以很好解答的题目;其它有影响计算机程序设计类书籍或文章中的例题;(3)各级各类计算机程序设计竞赛(例如ACM大赛)、程序员考试、求职面试的训练题和考试卷等.欢迎老师和同学们提供更好的题目.2题目内容涉及的知识点不超过大学一年级的知识水平,主要目标是训练学生将实际问题转化为计算机可以处理的形式并编写程序给出解答的能力.去掉了较复杂事务管理如图书管理、学生成绩管理之类的题目,这类事务管理方面题目希望在后续课程如C++面向对象程序设计、数据库应用及各专业的课程设计中进行.3 题目有多种完全不同的解答,给出的提示主要供指导教师参考.题目1:文件存取练习:要求实现如下功能:(1)定义函数Rand1000(), 随机生成1000个均不相同的正整数,并写入到文本文件“file1.dat”中,各数之间用空格来分隔.(2)编写一个函数input(int a[],int n),将上述数据读入到数组a中.(3)编写一个函数digitcount(int a[],int n,int b[10]), 统计数组a的每个元素保存的整数中,每位数字出现的次数,并分别保存在b[0]到b[9]中.(4)编写函数maxprime(int *p,int n), 找出其中最大的素数,如果不存在素数函数结果为0.(5)对于这些整数排序之后,分别输出相邻两数之差最大和之差最小的两个数,如果有多组满足条件要输出所有的.(6)定义函数myinput(int a[],int n),用fgetc函数从文件“file1.dat”上逐个读入字符,并将其转换成独立的正整数,并依次存入数组a中.提示:可查阅任何一本C语言程序设计教科书中关于文件部分,例如谭浩强,C程序设计(第三版),第13章.还需要熟悉随机数生成函数rand(),需要编写判断一个奇整数是否素数的程序等.部分可供参考程序如下:题目2:两个文件同时对照显示:程序从两个文件中读出文本行,并列显示在屏幕上.假定屏幕有80列,25行,则第0—34列显示第一个文件的内容,第40—74列显示第二个,第77-78行显示文本总的行序号.每屏显示20行,超过20行就显示在下一屏.程序应该能够以这种方式显示任意的两个文本文件,例如两个C程序源代码文件,两篇内容类似的文章形成的两个文本文件等.提示:先把两个文本文件读入,存入数组,再考虑显示的安排.题目3:实现一个C语言程序设计自助学习系统,要求实现的基本功能如下:1、测验(1)可以按固定的试卷数目,从题库中随机选取题目进行测试,如每次测试5道题或10道题.(2)每次只显示一道题,包括问题描述、备选答案;(3)根据学生答题结果,对比试卷答案,显示答题对错的信息;(4)答题全部结束后给出本次测试的成绩,按百分制评分.2、学习管理(1)通过题目浏览,自我测验,查看题解的过程来帮助学生学习.(2)需要为学生提供多种学习方式,至少应包括顺序选题学习和随机选题学习等方式.(3)如果是采用顺序选题方式学习,需要做到可以从中间某个位置开始学习,不是每次一定从第一题开始学习.3、题库管理(1)试卷库中保存全部试卷及其相关信息.(2)将要入库的试卷,按固定格式编辑整理好保存在ASCII文件中,通过计算机程序读取该文件,并将文件中的全部试卷添加到已有的试卷库中.(3)今后需要对于所有试卷分类进行管理,在库结构设计时,要考虑这些扩展功能的数据接口要求.(4)试卷库初始化,将试卷库内容全部清空,便于重新建立系统.提示:可以参考:余江,肖淑芬主编,C语言程序设计,天津科学技术出版社,2001年5月,273-313页.题目4:实现题目3中C语言程序设计自助学习系统得升级版,可考虑实现功能:一、测验1、系统自动组卷(1)试卷结构说明:以题库提供的试卷类别和各类试卷的数量为依据来实现.系统组卷前需要获得的信息是对于每类试卷要含有类别名称、试卷数、分数,所有类别的分数累加在一起要恰好是100分.(2)试卷保存:将上述组卷结果保存在二进制文件中,文件名由用户输入. (3)个性化组卷:输入学号后,系统根据试卷结构说明的规定自动组卷,做到每个学生试卷不同.2、错题本功能(1)答错的题目自动加入到错题本中;(2)可以对错题本中的题目逐题测验,不分题目类别;(3)可以制定分类测试.3、多科目测试二、学习管理1、分类别学习2、错题本内容学习3、多科目学习,选择科目后可以进行指定类别的分类别学习和错题本内容学习.三、题库管理1、入库试卷文件格式正确性检查.包括:试卷的描述的合法性检查,类别信息合法性检查,给出出错位置的信息.2、对于分类试卷存储方式的优化,例如:同类试卷连续存储的实现;3、目前完成的是单科目多类别的题库管理,要实现多科目多类别的题库管理.四、用户管理1、系统注册2、登录3、错题本等个性化信息管理4、屏幕背景颜色和字符颜色的设置5、学习位置的记载,要按科目记载,每个科目要按类别记载.提示:鼓励使用更多方法实现,例如使用数据库系统,VC++等.题目5:给出一个正整数n,一个存放1到n共n个正整数的数字金字塔构造如下:(1)1在最上方第0层;(2)如果x大于y并且x除以y的余数为0(即x>y && x%y = = 0),x要放在y下方一层(即若y在第i层,x应在i+1层);(3)每个数应尽可能放在更下方,即如果可以放在第i层,就不能放在i-1层;(4)相同层上的数从左向右从小到大排列.其实第i层是有i个素数因子的数的从小到大的排列.例如对n=6,符合这组规则的数字金字塔如下:12 3 54 6每个数按照它在塔中的位置从上到下从左到右从1开始编号,例如5,编号应该是4.要求你编写程序,输入一个正整数n,5<n<50, 再输入3个不大于n的正整数,然后程序输出所构造的数字金字塔,及所输入3个不大于n的正整数在数字金字塔中的编号.例如设输入了6,3,4,5,程序可以输出:12 3 54 6 //用数组形式表示数字金字塔.3,5,4 //分别是3,4,5在数字金字塔中的编号.程序编写完成后,要求给出你的程序对下列两组输入的结果:(1)10,7,8,9 (2)25,15,20,25提示:本题为2010年ACM大赛题目,鼓励使用更多方法实现.题目6:你一定很熟悉著名的Hanoi塔游戏,当理解了圆盘数目较多需要的时间太长之后,你可以放弃实际去移动圆盘,但你不应该放弃如下一个有点类似的游戏:设有n根柱子,每根柱子上有一个圆盘,圆盘上有一个正整数,不同圆盘上的数不同.初始时假定柱子按照其上圆盘上数的大小从左向右排列,移动规则是从左向右看,当前一根柱子最下圆盘上数与后一根柱子最上圆盘上数相加的和是一个完全平方数时,前一根柱子上所有圆盘移动到后一根柱子上方.要求你编写程序,输入柱子数目和圆盘上的整数,输出移动的过程和结果.例如,一组输入是:4,1,3,5,6,第一个数4表示有4根柱子,圆盘上的数依次是1,3,5,6.你的程序运行后,可以输出1->3->6, 5, c=2,表示移动是1到3,3到6,因为1+3=4, 3+6=9,而4和9是完全平方数,符合条件的移动只有这两次.移动结果是还有2根柱子上有圆盘,即c=2,有圆盘的一根柱子上圆盘3个,有数1->3->6,有圆盘另一根柱子上圆盘一个,有数5,它其实没有发生移动.程序编写完成后,要求给出你的程序对下列两组输入的结果:(1)9,1,2,3,4,5,6,7,8,9(2)10,1,3,5,7,9,11,13,15,17,19(本题为2010年ACM大赛题目.)提示:输入:9,1,2,3,4,5,6,7,8,9 输出:1->3->6, 2->7->9,4->5,8,c=4输入:10,1,3,5,7,9,11,13,15,17,19 输出:1->3->13, 5->11,7->9,15,17->19,c=5题目7:我们知道,在10进制数中有判断整除性的二个简单规则:一个正整数能够被3整除,当且仅当,它的各位数字之和能够被3整除;一个正整数能够被11整除,当且仅当,它的奇数位数字之和与偶数位数字之和的差能够被11整除;现在要问:对于b进制数,具有类似于10进制数的3和11的这种整除性判断的数是什么?具体地,请编写程序,输入进制的基数b,输出最小的可以如上判断整除性的数x和y.为确定,输入输出均采用10进制数.例如输入b为10,则自然要输出x为3,y为11;若输入b为8,则要输出x为7,y为3(例如8进制数25,按上述规则判断应能够被7和3整除,事实上,8进制数25是10进制数21,能够被7和3整除是显然的);若输入b为120,则要输出x为7,y为11(请自己验证这是对的).(本题为2011年ACM大赛题目.)提示:对于10进制数,10-1=9=3*3,10+1=11,10进制数n可以一般地表示为:n = a k10k + a k-110k-1 + ……+ a110 + a0保持n不改变数值将10换为10 –1和10+1,可以看出3和11可以如上判断整除性的理由.对于b进制数,n = a k b k + a k-1b k-1 + ……+ a1b + a0可以想到只需考虑b – 1和 b+1的最小因子.题目8:如果语文数学两门课程的成绩,甲同学分别是80分和90分,乙同学是90分和80分,丙同学是70和60分,这时比较甲同学和乙同学的成绩,只能说语文较差,数学较好,综合到一起就属于无法比较,但对丙同学可以比较,可以说甲和乙同学的成绩都比丙同学好.一般情况,设有一个三元向量的集合,若其中有向量P=(p1, p2, p3), Q=(q1, q2, q3), 规定P≦Q 当且仅当p1≦q1, p2≦q2, p3≦q3 .其中一个向量称为是一个极小元素,当且仅当它只≦它自己.例如如下三个三元向量组成了向量组(80,90,100),(90,80,70),(60,70,60),其中只有一个最小元素,是(60,70,60).请编写程序,输入n个三元向量,输出其中最小元素的数目.(本题为2011年ACM大赛题目.)提示:先对第一个坐标排序,再考虑第二个坐标,第三个坐标.题目9:在某城市有n座摩天大楼,问那二座之间的距离最小?设可以输入所有大楼的位置坐标,请编写程序输出距离最近的二座大楼及它们之间的距离.两点(x1, y1) 和 (x2, y2) 之间的距离d按照两种不同方式规定:(1)Euclid距离d =(2)Manhattan距离 d = | x1 –x2 | + | y1–y2 |.显然的解法是计算所有点对之间的距离再找出最小值,但本题只要求输出距离最近的二点及之间距离,所以应该给出不计算所有点对之间距离的更有效率的解法(本题为2011年ACM大赛题目).(可查阅:[沙特]M.H.Alsuwaiyel著,吴伟昶等译,算法设计技巧与分析,电子工业出版社,2004年8月,第121-124页.或者:[美]Michael T.Goodrich等著,霍红卫译,算法分析与设计,人民邮电出版社,2006年10月,第385-387页.)提示:找到两点距离d后,接下去可检查宽不超过d的长条.题目10:一条贪吃的蛇在一个n*m的网格中游走,它只能从一个方格走向另一个相邻的方格,这里相邻的意思是两个方格有公共边.每个方格可以看作是一个房间,其中一些是空的,一些存放有苹果.贪吃的蛇根本不进入空的房间,而进入有苹果的房间后就可以带走所有苹果使房间成为空的.蛇从一个指定的房间出发,最终回到它的家,把一路带来的苹果存储到家中,当然,它希望带来的苹果最多.请编写程序,输入有整数n和m,及n*m的一个矩阵,矩阵元素数值中有一个是-1,表示蛇的出发位置,有一个是-2,表示蛇的家的位置,其余数值是非负整数,0表示房间为空,非零整数表示苹果的数目.输出蛇选择的游走路径和获得的最多的苹果数目.例如输入4*4矩阵:7 0 4 184 0 1 115 7 11 -10 12 -2 0则应输出 (2, 3), (1, 3), (0, 3), (0, 2), (1, 2), (2, 2), (2, 1), (3, 1), (3, 2), 带回苹果数为1+18+4+1+11+7+12 = 54.(本题为2011年ACM大赛题目).(可查阅:吕国英,任瑞征等编著,算法设计与分析(第2版),清华大学出版社,2009年1月,第200-202页.提示:这是一个利用回溯算法的迷宫搜索类型问题,可参考类似问题的已有解法.题目11:化学家研究原子团的行为时,认为每个原子具有整数能量,这个整数可以是正数、零和负数,绝对值不超过100.可以认为原子排列成为一行,一行中任意多个连续的原子可以形成原子团,原子团的能量是其中各原子能量的代数和.问题是怎样编写程序,求出具有最大能量的原子团和能量数值.要求程序输入一列原子的能量数值,以-1结束,输出找到的能量最大的原子团及能量数值.例如输入8,0,6,4,-2,-1,应输出原子团8,0,6,4,及能量数值18.(本题为2010年ACM大赛题目)(可查阅:吕国英,任瑞征等编著,算法设计与分析,清华大学出版社,2009年1月,第265-270页).提示:这是最大子段和问题.题目12:一刀可以把蛋糕分为两个部分,现在给出要分为两部分的面积的比值,希望求出切口的弦的长度.这里当然要假定蛋糕是一个圆,并设其半径为 1.例如,输入两部分比值为1:1,切口是直径,长为2;输入1:2,应输出1.9285;输入10:1,应输出1.4145.(本题为2010年ACM大赛题目)提示:计算半弦长,可以利用公式a2=2rh-h2,计算弓形面积,用公式s=0.5*xita*r*r-a*sqrt(r*r-a*a)。

2020大一个人赛(10)题解2018-2019ACM-ICPCPacificNorthw。。。

2020大一个人赛(10)题解2018-2019ACM-ICPCPacificNorthw。。。

2020⼤⼀个⼈赛(10)题解2018-2019ACM-ICPCPacificNorthw。

2018-2019 ACM-ICPC Pacific Northwest Regional Contest (Div. 1)部分题A - Exam题意:给你k(朋友正确个数)和两个字符串(你和你朋友的答案),问你能答对的最⼤个数思路:找你和朋友相同的个数,然后进⾏判断就⾏。

1 #include<iostream>2 #include<algorithm>3 #include<vector>4 #include<map>5 #include<cstring>6using namespace std;7#define ll long long8const int N = 2e6+25;9const int mod = 1e9 + 7;10 ll a[N];11int main()12 {13 ll n, ans = 0, sum = 0;14 cin >> n;15string s1, s2;16 cin >> s1 >> s2;17for (int i = 0; i < s1.size(); i++)18 {19if (s1[i] == s2[i])20 ans++;21else22 sum++;23 }24if (ans == n)25 cout << s1.size() << endl;26else if (ans > n)27 cout << n + sum << endl;28else cout << s1.size() - (n - ans) << endl;29303132 }B - Coprime Integers题意:给你区间【a,b】【c,d】,问你互质整数对的数量。

ACM试题

ACM试题

91000: 整数a+bTime Limit: 1 Sec Memory Limit: 30 MBSubmit: 24043 Solved: 11168SubmitStatusWeb Board Description计算两个整数的和。

Input输入两个整数,两个整数用空格隔开。

Output输出为两个整数的和,单独占一行Sample Input1 1Sample Output2HINTSource1004: 三位数的数位分离Time Limit: 1 Sec Memory Limit: 30 MBSubmit: 12806 Solved: 8289SubmitStatusWeb BoardDescription从键盘输入一个任意的三位正整数,分别求出其个位、十位和百位上的数字。

Input输入任意的一个三位正整数。

Output依次输出个位、十位、百位上的数字。

以空格间隔,但最后一个数据的后面没有空格,直接换行。

Sample Input367Sample Output7 6 3HINTSource1005: 整数幂Time Limit: 1 Sec Memory Limit: 30 MBSubmit: 18292 Solved: 7703SubmitStatusWeb BoardDescription输入3个整数,输出它们的1次幂、2次幂和3次幂。

Input输入3整数,用空格隔开Output输出3行,每行3个整数,分别是它们的1次幂、2次幂和3次幂,每个整数占9列,不足9列左对齐Sample Input1 5 100Sample Output1 1 15 25 125100 10000 1000000HINTSource1006: 求等差数列的和Time Limit: 1 Sec Memory Limit: 30 MBSubmit: 11569 Solved: 7491SubmitStatusWeb BoardDescription给出三个整数,分别表示等差数列的第一项、最后一项和公差,求该数列的和。

计算两坐标点之间的距离公式c语言

计算两坐标点之间的距离公式c语言

计算两坐标点之间的距离公式(C语言实现)
计算两坐标点之间的距离是一种常见的数学计算问题。

在计算机科学和物理学等领域中,我们经常需要计算两个点之间的距离以进行各种计算和分析。

本文将介绍一种在C语言中计算两个坐标点之间距离的方法。

前言
在开始编写实现计算两点之间距离的C语言代码之前,让我们首先了解一下两点之间距离的数学定义。

在平面几何学中,两个点A(x1, y1)和B(x2, y2)之间的欧几里得距离(也称为直线距离)可以通过以下公式计算:
d = √((x2 - x1)² + (y2 - y1)²)
其中√代表平方根运算。

实现
现在我们开始在C语言中实现这个距离计算公式。

```c #include <stdio.h> #include <math.h>
// 定义计算距离的函数 double distance(double x1, double y1, double x2, double y2) { double dx = x2 - x1; double dy = y2 - y1; return sqrt(dx * dx + dy * dy); } int main() { double x1, y1, x2, y2;
// 输入点A的坐标
printf(\。

题目要求从键盘输入两个点的坐标x1y1x2y2然后输出它们之间的距离c语言

题目要求从键盘输入两个点的坐标x1y1x2y2然后输出它们之间的距离c语言

题目要求从键盘输入两个点的坐标x1y1x2y2然后输出它们之间的距离c语言题目要求输入两个点的坐标(x1,y1)和(x2,y2),然后计算并输出它们之间的距离。

解题思路:1. 首先,我们需要使用scanf函数从键盘输入两个点的坐标(x1, y1)和(x2, y2)。

2.接下来,我们使用勾股定理来计算两点间的距离。

勾股定理公式如下:distance = sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1))其中sqrt是C语言中用来计算平方根的数学库函数。

3. 最后,我们使用printf函数将计算得到的距离输出到屏幕上。

下面是完整的C语言代码实现:```c#include <stdio.h>#include <math.h>int maiint x1, y1, x2, y2;double distance;//输入两个点的坐标printf("请输入第一个点的坐标:");scanf("%d%d", &x1, &y1);printf("请输入第二个点的坐标:");scanf("%d%d", &x2, &y2);//计算两点间的距离distance = sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1));//输出结果printf("两点间的距离为:%.2lf\n", distance);return 0;```通过上述代码,我们可以实现从键盘输入两个点的坐标,并计算它们之间的距离,并输出结果。

需要注意的是,以上代码中使用了`sqrt`函数进行开方运算,因此需要在编译时链接数学库。

在gcc编译器下,可以使用`-lm`参数来链接数学库。

例如,使用以下命令进行编译和运行:```shellgcc -o distance distance.c -lm./distance```。

acm题目

acm题目

输入一个字符串,判断其是否是C的合法标识符。

Input输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串。

Output对于每组输入数据,输出一行。

如果输入数据是C的合法标识符,则输出"yes",否则,输出“no”。

Sample Input312ajffi8x_aff ai_2Sample Outputnoyesno对于输入的每个字符串,查找其中的最大字母,在该字母后面插入字符串“(max)”。

Input输入数据包括多个测试实例,每个实例由一行长度不超过100的字符串组成,字符串仅由大小写字母构成。

Output对于每个测试实例输出一行字符串,输出的结果是插入字符串“(max)”后的结果,如果存在多个最大的字母,就在每一个最大字母后面都插入"(max)"。

Sample InputabcdefgfedcbaxxxxxSample Outputabcdefg(max)fedcbax(max)x(max)x(max)x(max)x(max)统计每个元音字母在字符串中出现的次数。

Input输入数据首先包括一个整数n,表示测试实例的个数,然后是n行长度不超过100的字符串。

Output对于每个测试实例输出5行,格式如下:a:num1e:num2i:num3o:num4u:num5多个测试实例之间由一个空行隔开。

请特别注意:最后一块输出后面没有空行:)Sample Input2aeioumy name is ignatiusSample Outputa:1e:1i:1o:1u:1a:2e:1i:3o:0u:1求n个数的最小公倍数。

Input输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。

Output为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。

你可以假设最后的输出是一个32位的整数。

ACM大赛必备_常用函数整理_ACM模板

ACM大赛必备_常用函数整理_ACM模板

目录一、数学问题 (4)1.精度计算——大数阶乘 (4)2.精度计算——乘法(大数乘小数) (4)3.精度计算——乘法(大数乘大数) (5)4.精度计算——加法 (6)5.精度计算——减法 (7)6.任意进制转换 (8)7.最大公约数、最小公倍数 (9)8.组合序列 (10)9.快速傅立叶变换(FFT) (10)10.Ronberg 算法计算积分 (12)11.行列式计算 (14)12.求排列组合数 (15)13.求某一天星期几 (15)14.卡特兰(Catalan) 数列原理 (16)15.杨辉三角 (16)16.全排列 (17)17.匈牙利算法----最大匹配问题 (18)18.最佳匹配KM 算法 (20)二、字符串处理 (22)1.字符串替换 (22)2.字符串查找 (23)3.字符串截取 (24)4.LCS-最大公共子串长度 (24)5.LCS-最大公共子串长度 (25)6.数字转换为字符 (26)三、计算几何 (27)1.叉乘法求任意多边形面积 (27)2.求三角形面积 (27)3.两矢量间角度 (28)4.两点距离(2D、3D) (28)5.射向法判断点是否在多边形内部 (29)6.判断点是否在线段上 (30)7.判断两线段是否相交 (31)8.判断线段与直线是否相交 (32)9.点到线段最短距离 (32)10.求两直线的交点 (33)11.判断一个封闭图形是凹集还是凸集 (34)12.Graham 扫描法寻找凸包 (35)13.求两条线段的交点 (36)四、数论 (37)1.x 的二进制长度 (37)2.返回x 的二进制表示中从低到高的第i 位 (38)3.模取幂运算 (38)4.求解模线性方程 (39)5.求解模线性方程组(中国余数定理) (39)6.筛法素数产生器 (40)7.判断一个数是否素数 (41)8.求距阵最大和 (42)8.求一个数每一位相加之和 (43)10.质因数分解 (43)11.高斯消元法解线性方程组 (44)五、图论 (45)1.Prim 算法求最小生成树................................................. 45 2.Dijkstra 算法求单源最短路径.. (46)3.Bellman-ford 算法求单源最短路径 (47)4.Floyd-Warshall 算法求每对节点间最短路径 (48)5.解欧拉图 (49)六、排序/查找 (50)1.快速排序 (50)2.希尔排序 (51)3.选择法排序 (52)4.二分查找 (52)七、数据结构 (53)1.顺序队列 (53)2.顺序栈 (56)3.链表 (59)4.链栈 (63)5.二叉树 (66)八、高精度运算专题 (68)1.专题函数说明 (68)2.高精度数比较 (69)3.高精度数加法 (69)4.高精度数减法 (70)5.高精度乘10 (71)6.高精度乘单精度 (71)7.高精度乘高精度 (72)8.高精度除单精度 (72)9.高精度除高精度 (73)九、标准模板库的使用 (74)1.计算求和 (74)2.求数组中的最大值 (76)3. sort 和qsort (76)十、其他 (78)1.运行时间计算 (78)一、数学问题1.精度计算——大数阶乘语法:int result=factorial(int n);参数:n:n 的阶乘返回值:阶乘结果的位数注意:本程序直接输出n!的结果,需要返回结果请保留long a[] 需要math.h源程序:int factorial(int n){long a[10000];int i,j,l,c,m=0,w;a[0]=1;for(i=1;i<=n;i++){c=0;for(j=0;j<=m;j++){a[j]=a[j]*i+c;c=a[j]/10000;a[j]=a[j]%10000;}if(c>0) {m++;a[m]=c;}}w=m*4+log10(a[m])+1;printf("\n%ld",a[m]);for(i=m-1;i>=0;i--) printf("%4.4ld",a[i]);return w;}我也可以做到..5 / 782.精度计算——乘法(大数乘小数)语法:mult(char c[],char t[],int m);参数:c[]:被乘数,用字符串表示,位数不限t[]:结果,用字符串表示m:乘数,限定10 以内返回值:null注意:需要string.h源程序:void mult(char c[],char t[],int m){int i,l,k,flag,add=0;char s[100];l=strlen(c);for (i=0;i<l;i++)s[l-i-1]=c[i]-'0';for (i=0;i<l;i++){k=s[i]*m+add;if (k>=10) {s[i]=k%10;add=k/10;flag=1;} else{s[i]=k;flag=0;add=0;}}if (flag) {l=i+1;s[i]=add;} else l=i;for (i=0;i<l;i++)t[l-1-i]=s[i]+'0'; t[l]='\0';}3.精度计算——乘法(大数乘大数)语法:mult(char a[],char b[],char s[]);参数:a[]:被乘数,用字符串表示,位数不限b[]:乘数,用字符串表示,位数不限t[]:结果,用字符串表示返回值:null注意:空间复杂度为o(n^2)需要string.h源程序:void mult(char a[],char b[],char s[]){我也可以做到..6 / 78int i,j,k=0,alen,blen,sum=0,res[65][65]={0},flag=0; char result[65];alen=strlen(a);blen=strlen(b);for (i=0;i<alen;i++)for (j=0;j<blen;j++) res[i][j]=(a[i]-'0')*(b[j]-'0');for (i=alen-1;i>=0;i--){for (j=blen-1;j>=0;j--) sum=sum+res[i+blen-j-1][j]; result[k]=sum%10;k=k+1;sum=sum/10;}for (i=blen-2;i>=0;i--){for (j=0;j<=i;j++) sum=sum+res[i-j][j];result[k]=sum%10;k=k+1;sum=sum/10;}if (sum!=0) {result[k]=sum;k=k+1;}for (i=0;i<k;i++) result[i]+='0';for (i=k-1;i>=0;i--) s[i]=result[k-1-i];s[k]='\0';while(1){if (strlen(s)!=strlen(a)&&s[0]=='0')strcpy(s,s+1);elsebreak;}}4.精度计算——加法语法:add(char a[],char b[],char s[]);参数:a[]:被加数,用字符串表示,位数不限b[]:加数,用字符串表示,位数不限s[]:结果,用字符串表示返回值:null注意:空间复杂度为o(n^2)我也可以做到..7 / 78需要string.h源程序:void add(char a[],char b[],char back[]){int i,j,k,up,x,y,z,l;char *c;if (strlen(a)>strlen(b)) l=strlen(a)+2; else l=strlen(b)+2; c=(char *) malloc(l*sizeof(char));i=strlen(a)-1;j=strlen(b)-1;k=0;up=0;while(i>=0||j>=0){if(i<0) x='0'; else x=a[i];if(j<0) y='0'; else y=b[j];z=x-'0'+y-'0';if(up) z+=1;if(z>9) {up=1;z%=10;} else up=0;c[k++]=z+'0';i--;j--;}if(up) c[k++]='1';i=0;c[k]='\0';for(k-=1;k>=0;k--)back[i++]=c[k];back[i]='\0';}5.精度计算——减法语法:sub(char s1[],char s2[],char t[]);参数:s1[]:被减数,用字符串表示,位数不限s2[]:减数,用字符串表示,位数不限t[]:结果,用字符串表示返回值:null注意:默认s1>=s2,程序未处理负数情况需要string.h源程序:void sub(char s1[],char s2[],char t[])我也可以做到..8 / 78{int i,l2,l1,k;l2=strlen(s2);l1=strlen(s1);t[l1]='\0';l1--;for (i=l2-1;i>=0;i--,l1--){if (s1[l1]-s2[i]>=0)t[l1]=s1[l1]-s2[i]+'0';else{t[l1]=10+s1[l1]-s2[i]+'0';s1[l1-1]=s1[l1-1]-1;}}k=l1;while(s1[k]<0) {s1[k]+=10;s1[k-1]-=1;k--;}while(l1>=0) {t[l1]=s1[l1];l1--;}loop:if (t[0]=='0') {l1=strlen(s1);for (i=0;i<l1-1;i++) t[i]=t[i+1];t[l1-1]='\0';goto loop;}if (strlen(t)==0) {t[0]='0';t[1]='\0';}}6.任意进制转换语法:conversion(char s1[],char s2[],char t[]);参数:s[]:转换前的数字s2[]:转换后的数字d1:原进制数d2:需要转换到的进制数返回值:null注意:高于9 的位数用大写'A'~'Z'表示,2~16 位进制通过验证源程序:void conversion(char s[],char s2[],long d1,long d2){我也可以做到..9 / 78long i,j,t,num;char c;num=0;for (i=0;s[i]!='\0';i++){if (s[i]<='9'&&s[i]>='0') t=s[i]-'0'; else t=s[i]-'A'+10;num=num*d1+t;}i=0;while(1){t=num%d2;if (t<=9) s2[i]=t+'0'; else s2[i]=t+'A'-10;num/=d2;if (num==0) break;i++;}for (j=0;j<i/2;j++){c=s2[j];s2[j]=s[i-j];s2[i-j]=c;}s2[i+1]='\0';}7.最大公约数、最小公倍数语法:resulet=hcf(int a,int b)、result=lcd(int a,int b)参数:a:int a,求最大公约数或最小公倍数b:int b,求最大公约数或最小公倍数返回值:返回最大公约数(hcf)或最小公倍数(lcd)注意:lcd 需要连同hcf 使用源程序:int hcf(int a,int b){int r=0;while(b!=0){r=a%b;a=b;b=r;}return(a);我也可以做到..10 / 78}lcd(int u,int v,int h){return(u*v/h);}8.组合序列语法:m_of_n(int m, int n1, int m1, int* a, int head)参数:m:组合数C 的上参数n1:组合数C 的下参数m1:组合数C 的上参数,递归之用*a:1~n 的整数序列数组head:头指针返回值:null注意:*a 需要自行产生初始调用时,m=m1、head=0调用例子:求C(m,n)序列:m_of_n(m,n,m,a,0);源程序:void m_of_n(int m, int n1, int m1, int* a, int head){int i,t;if(m1<0 || m1>n1) return;if(m1==n1){return;}m_of_n(m,n1-1,m1,a,head); // 递归调用t=a[head];a[head]=a[n1-1+head];a[n1-1+head]=t;m_of_n(m,n1-1,m1-1,a,head+1); // 再次递归调用t=a[head];a[head]=a[n1-1+head];a[n1-1+head]=t;}9.快速傅立叶变换(FFT)语法:kkfft(double pr[],double pi[],int n,int k,double fr[],double fi[],intl,int il);参数:我也可以做到..11 / 78pr[n]:输入的实部pi[n]:数入的虚部n,k:满足n=2^kfr[n]:输出的实部fi[n]:输出的虚部l:逻辑开关,0 FFT,1 ifFTil:逻辑开关,0 输出按实部/虚部;1 输出按模/幅角返回值:null注意:需要math.h源程序:void kkfft(pr,pi,n,k,fr,fi,l,il)int n,k,l,il;double pr[],pi[],fr[],fi[];{int it,m,is,i,j,nv,l0; double p,q,s,vr,vi,poddr,poddi;for (it=0; it<=n-1; it++){m=it; is=0;for (i=0; i<=k-1; i++){j=m/2; is=2*is+(m-2*j); m=j;}fr[it]=pr[is]; fi[it]=pi[is];}pr[0]=1.0; pi[0]=0.0;p=6.283185306/(1.0*n);pr[1]=cos(p); pi[1]=-sin(p);if (l!=0) pi[1]=-pi[1];for (i=2; i<=n-1; i++){p=pr[i-1]*pr[1];q=pi[i-1]*pi[1];s=(pr[i-1]+pi[i-1])*(pr[1]+pi[1]);pr[i]=p-q; pi[i]=s-p-q;}for (it=0; it<=n-2; it=it+2){vr=fr[it]; vi=fi[it];fr[it]=vr+fr[it+1]; fi[it]=vi+fi[it+1];fr[it+1]=vr-fr[it+1]; fi[it+1]=vi-fi[it+1]; }m=n/2; nv=2;for (l0=k-2; l0>=0; l0--){我也可以做到..12 / 78m=m/2; nv=2*nv;for (it=0; it<=(m-1)*nv; it=it+nv)for (j=0; j<=(nv/2)-1; j++){p=pr[m*j]*fr[it+j+nv/2];q=pi[m*j]*fi[it+j+nv/2];s=pr[m*j]+pi[m*j];s=s*(fr[it+j+nv/2]+fi[it+j+nv/2]); poddr=p-q; poddi=s-p-q;fr[it+j+nv/2]=fr[it+j]-poddr;fi[it+j+nv/2]=fi[it+j]-poddi;fr[it+j]=fr[it+j]+poddr;fi[it+j]=fi[it+j]+poddi;}}if (l!=0)for (i=0; i<=n-1; i++){fr[i]=fr[i]/(1.0*n);fi[i]=fi[i]/(1.0*n);}if (il!=0)for (i=0; i<=n-1; i++){pr[i]=sqrt(fr[i]*fr[i]+fi[i]*fi[i]);if (fabs(fr[i])<0.000001*fabs(fi[i])) {if ((fi[i]*fr[i])>0) pi[i]=90.0;else pi[i]=-90.0;}elsepi[i]=atan(fi[i]/fr[i])*360.0/6.283185306;}return;}10.Ronberg 算法计算积分语法:result=integral(double a,double b);参数:a:积分上限b:积分下限我也可以做到..13 / 78function f:积分函数返回值:f 在(a,b)之间的积分值注意:function f(x)需要自行修改,程序中用的是sina(x)/x 需要math.h默认精度要求是1e-5源程序:double f(double x){return sin(x)/x; //在这里插入被积函数}double integral(double a,double b){double h=b-a;double t1=(1+f(b))*h/2.0;int k=1;double r1,r2,s1,s2,c1,c2,t2;loop:double s=0.0;double x=a+h/2.0;while(x<b){s+=f(x);x+=h;}t2=(t1+h*s)/2.0;s2=t2+(t2-t1)/3.0;if(k==1){k++;h/=2.0;t1=t2;s1=s2;goto loop;}c2=s2+(s2-s1)/15.0;if(k==2){c1=c2;k++;h/=2.0;t1=t2;s1=s2;goto loop;}r2=c2+(c2-c1)/63.0;if(k==3){r1=r2; c1=c2;k++;h/=2.0;t1=t2;s1=s2;我也可以做到..14 / 78goto loop;}while(fabs(1-r1/r2)>1e-5){ r1=r2;c1=c2;k++;h/=2.0;t1=t2;s1=s2;goto loop;}return r2;}11.行列式计算语法:result=js(int s[][],int n)参数:s[][]:行列式存储数组n:行列式维数,递归用返回值:行列式值注意:函数中常数N 为行列式维度,需自行定义源程序:int js(s,n)int s[][N],n;{int z,j,k,r,total=0;int b[N][N];/*b[N][N]用于存放,在矩阵s[N][N]中元素s[0]的余子式*/if(n>2){for(z=0;z<n;z++){for(j=0;j<n-1;j++)for(k=0;k<n-1;k++)if(k>=z) b[j][k]=s[j+1][k+1]; elseb[j][k]=s[j+1][k];if(z%2==0) r=s[0][z]*js(b,n-1); /*递归调用*/else r=(-1)*s[0][z]*js(b,n-1);total=total+r;}}else if(n==2)total=s[0][0]*s[1][1]-s[0][1]*s[1][0];return total;我也可以做到..15 / 78}12.求排列组合数语法:result=P(long n,long m); / result=long C(long n,long m);参数:m:排列组合的上系数n:排列组合的下系数返回值:排列组合数注意:符合数学规则:m<=n源程序:long P(long n,long m){long p=1;while(m!=0){p*=n;n--;m--;}return p;}long C(long n,long m){long i,c=1;i=m;while(i!=0){c*=n;n--;i--;}while(m!=0){c/=m;m--;}return c;}13.求某一天星期几语法:result=weekday(int N,int M,int d)参数:N,M,d:年月日,例如:2003,11,4返回值:0:星期天,1 星期一……注意:需要math.h适用于1582 年10 月15 日之后, 因为罗马教皇格里高利十三世在这一天启用新历法.源程序:我也可以做到..16 / 78int weekday(int N,int M,int d){int m,n,c,y,w;m=(M-2)%12;if (M>=3) n=N;else n=N-1;c=n/100;y=n%100;w=(int)(d+floor(13*m/5)+y+floor(y/4)+floor(c/4)-2*c)%7;while(w<0) w+=7;return w;}14.卡特兰(Catalan) 数列原理令h(1)=1,catalan 数满足递归式:h(n)= h(1)*h(n-1) + h(2)*h(n-2) + ... + h(n-1)h(1) (其中n>=2)该递推关系的解为:h(n)=c(2n-2,n-1)/n (n=1,2,3,...)1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440,9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420,24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452, …1.括号化问题。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算两点间的距离
Problem Description
输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离。

Input
输入数据有多组,每组占一行,由4个实数组成,分别表示x1,y1,x2,y2,数据之间用空格隔开。

Output
对于每组输入数据,输出一行,结果保留两位小数。

Sample Input 0 0 0 1
0 1 1 0
Sample Output 1.00
1.41
程序:
#include"stdio.h"
#include"math.h"
#define Max 100
double distance(float x1,float y1,float x2,float y2);
void main()
{
float x1[Max],y1[Max],x2[Max],y2[Max];
double dist[Max];
int n=0,m=0;
printf("输入你要输入的数据组数n=");
scanf("%d",&n);
printf("Input:\n");
for(m=0;m<n;m++)
{
scanf("%f %f %f %f",&x1[m],&y1[m],&x2[m],&y2[m]);
dist[m]=distance(x1[m],y1[m],x2[m],y2[m]);
}
printf("Output:\n");
for(m=0;m<n;m++)
printf("%.2f\n",dist[m]);
}
//函数distance用来求两点间的距离
double distance(float x1,float y1,float x2,float y2)
{
float tempx=0,tempy=0;
double dist;
if(x2>x1)tempx=x2-x1;
else tempx=x1-x2;
if(y2>y1)tempy=y2-y1;
else tempy=y1-y2;
dist=sqrt(pow(tempx,2)+pow(tempy,2));
return dist;
}。

相关文档
最新文档