山东科技大学OJ部分题目记答案

合集下载

山东科技大学OJ部分题目记问题详解

山东科技大学OJ部分题目记问题详解

//////////Problem D: 货币兑换Description给出人民币对美元、欧元、日元的当日汇率,求给定金额的人民币能兑换成外币的金额,求给定金额的外币能兑换成人民币的金额。

要计算的外币有三种:美元、欧元、日元。

Input输入有三行。

第一行依次为美元、欧元、日元外币汇率,用空格分开。

汇率用100外币为单位,精确到小数点后4位,如668.5200表示“100美元=668.5200人民币”。

汇率浮动范围为(0,10000)。

第二行为外币金额x,第三行为人民币金额y。

x,y均为整数,且0<x,y<10000。

Output输出为两行。

第一行为金额为x的美元、欧元、日元兑换成人民币的金额,用空格分开。

第二行为金额为y的人民币兑换成美元、欧元、日元的金额,用空格分开。

所有金额精确到小数点后两位。

Sample Input668.5200 908.0685 7.985215001500Sample Output10027.80 13621.03 119.78#include <stdio.h>int main(){double i,j,k,a,b,c,d,e,f;double x,y;scanf ("%lf %lf %lf",&i,&j,&k);scanf ("%lf%lf",&x,&y);a=x/100*i;b=y/100*j;c=x/100*k;d=y*100/i;e=y*100/j;f=y*100/k;printf ("%.2lf %.2lf %.2lf\n",a,b,c);printf ("%.2lf %.2lf %.2lf\n",d,e,f);}////Problem E: 求字符的值////Description从键盘输入3个字符(不含双字节字符),分别输出每个字符的十进制值(ASCII码)、八进制值和十六进制值。

山东科技大学算法试题 (2)

山东科技大学算法试题 (2)

山东科技大学 — 学年第 学期《算法设计与分析》考试试卷班级 姓名 学号一、设数组A 有n 个元素,需要找出其中的最大最小值。

(20分)(1) 请给出一个解决方法,并分析其复杂性。

(2) 把n 个元素等分为两组A1和A2,分别求这两组的最大值和最小值,然后分别将这两组的最大值和最小值相比较,求出全部元素的最大值和最小值。

如果A1和A2中的元素多于两个,则再用上述方法各分为两个子集。

直至子集中元素至多两个元素为止。

这是什么方法的思想?请给出该方法的算法描述,并分析其复杂性。

二、已知1()*()i i k k ij r r A a +=,k =1,2,3,4,5,6,r 1=5,r 2=10,r 3=3,r 4=12,r 5=5,r 6=50,r 7=6,求矩阵链积A 1×A 2×A 3×A 4×A 5×A 6的最佳求积顺序。

(20分) 三、对于下图使用Dijkstra 算法求由顶点a 到其他各个顶点的最短路径。

并给出求各个顶点对之间的最短路径的算法思想。

(20分)。

四、 15谜问题:在一个4×4的方格的棋盘上,将数字1到15代表的15个棋子以任意的顺序置入各方格中,空出一格。

要求通过有限次的移动,把一个给定的初始状态变成目标状态。

移动的规则是:每次只能把空格周围的四格数字(棋子)中的任意一个移入空格,从而形成一个新的状态。

为了有效的移动,设计了估值函数C 1(x),表示在结点x 的状态下,没有到达目标状态下的正确位置的棋子的个数。

(20分)请使用该估计函数,对图示的初始状态,给出使用分支限界方法转换到目标状态的搜索树。

五、设x1、x2、x3是一个三角形的三条边,而且x1+x2+x3=14。

请问有多少种不同的三角形?给出解答过程。

(20分)。

[山科]第一届山东省ACM竞赛题解

[山科]第一届山东省ACM竞赛题解

第一届山东省ACM竞赛题解A.Phone Number简单题。

n只有1000,O(n ^ 2)判断就可以了。

B.Balloons数据结构简单题,DFS求连通分量。

注意两个式子,前者表示是4个方向连通,后者表示8个方向连通。

C.Clockwise计算几何+DP。

首先要看明白顺时针和逆时针的定义,其实按正常的理解就可以,但要注意三点共线的情况,例如下标为a<b<c 的三点构成的角180度算作顺时针,0度算作逆时针。

顺逆时针用叉积和点积判断就可以。

删掉最少点,也就是保留最多点,我们考虑顺时针的情况(逆时针相同),考虑保留下来的最后一条线段,它和它的前一条线段要构成顺时针的角才可以,所以我们使用dp[i][j](i > j)来表示最后一条线段是i,j所能保留下来的最大的珠子数,dp[i][j] = max(dp[j][k] + 1)(j > k,i、j、k 三点构成顺时针角),复杂度O(n^3)D.Shopping简单题。

最大值-最小值的二倍就是答案。

E.Emergency图论,Flody算法。

Q有100000之大,每次求两点间距离必然超时。

但是可以发现图只有300个顶点,我们只在新的顶点被标记时更新两点间的距离,分析可以发现我们可以先更新从此标记点到另外点的最短距离,再更新从另外点到此标记点的最短距离,最后再更新经过此标记点的最短距离就可以了,复杂度O(n^2),总共可能有n次标记,故总复杂度O(n^3),其它查询在O(1)内就能完成。

另外要注意的是会有重边和自环,求最短路,重边保留最小的,自环去掉就可以了。

F.Fairy tale模拟题。

读懂题目,跟着题目模拟就可以了。

需要注意的就是geometrical distance是两点间的直线距离,我理解为行和列差值的和错了一次。

定义一个状态结构,然后定义<操作符,用set判重,可以简化操作,尽量用数组存方位信息,而不是IF-ELSE。

山东科技大学OJ集锦

山东科技大学OJ集锦

(1-2)Description计算两整数x和y(0<x,y<1000)的和、差、积、商、余数、x的平方和y的三次方。

Input输入只有一行,格式见sample。

Output输出为多行,按顺序每行输出x,y的和、差、积、商、余数、x的平方和y的三次方,格式见sampleSample Inputx = 11, y = 3Sample Outputx + y : 14x - y : 8x * y : 33x / y quotient: 3, remainder: 2x ^ 2 : 121y ^ 3 : 27HINT注意输入输出格式。

了解C语言整数除法运算符的特点,并且没有求幂的运算符#include <stdio.h>int main(){int x,y;0<x<1000,0<y<1000;scanf("x = %d, y = %d",&x,&y);printf("x + y : %d\n",x+y);printf("x - y : %d\n",x-y);printf("x * y : %d\n",x*y);printf("x / y quotient: %d, remainder: %d\n",x/y,x%y);printf("x ^ 2 : %d\n",x*x);printf("y ^ 3 : %d\n",y*y*y);return 0;}(1-3)Description从键盘输入圆的半径,求圆的面积和周长,圆周率取3.14。

Input输入一个浮点型数据,有效数字不会超过十进制的6位。

Output输出为两行。

第一行为圆的面积,第二行为圆的周长,格式见sample。

Sample Input3Sample OutputArea: 28.260000Perimeter: 18.840000HINT了解浮点类型的输入、输出和算术运算符#include <stdio.h>#define P 3.14int main(){float r,s,c;scanf("%f",&r);s=P*r*r;c=2*r*P;printf("Area: %f\n",s);printf("Perimeter: %f\n",c);return 0;}(1-4)Description求3个数的平均值。

山东科技大学机械原理历年真题及详细答案

山东科技大学机械原理历年真题及详细答案

山东科技人学2009年招收硕士学位研究生入学考试机械®理试卷・、(15分)分别计算图1所示两个平面机构的自由度.♦千少7-2^- …、,渤》 I/ZZ1图】"二—tf 己&各科仟的尺寸方:/刖= 24zn/n •心=78zwn T Ig = 48ff7w • / = 100* ;并知原动件1以等角速度® = 10“〃/$ 沿逆时针方向回转•试用图解法求机构在0( =60・时构件2. 3的角速度和角加 速度。

解 豆用砒4押伽郦以 孤3 3 / 〃阻(林A勺松二衣(再二必丄BP =2% 二必必列吆二S*伕冲呀 fr图241D3 I ?(b) 4T6L(a二2卜汩« I內二1£I三.(20分)图3所示的轮系中.已知*齿轮齿数:為《£=35"I =Z ;=31・ Zj=z ;u97・试求该轮系的伎动比A”及方向.W 、(20分)图4所示•现欲设讣 枚链四杆机构・设已知摇杆CQ 的长度为 {■O = 75mm .疔稈速度变化系数K-1.5,机架/(0的长度为口《10(加/«, 二吨机架阿的夹角为卩=4亍•试求關柄的氏®/站和连杆的 —' r C 克为忙如4 \ 十1 L 乩一Sg = 4A 1^2R / / DD 〃///〃〃〃////〃//// A 图4"1 "岭"j Suh 丄]lTmn\ I rrl I////ZZZZ/Ipmn\1777ZW77]Q 轴做齡'27 -Jk 二辿则心_沏S?乜〃 (9乘矽卒■ 梓绍/址叶曲一4 »F?7W 厉 Mr" 一一5;3・丁图3扌h 化”产盂?= 〃4匸摇杆的F 个极恨位 长度fflC-/1/2 二 云二左 凶二九N 旦 2 6Uf me 纽2A^〉r»h«m 处gGft 砂7《cU 二m2沪%s 如.=皿271»彷二淞I旭二dr 如四久4 dsa 二戻eH Z 寸比 五、(20分)试设计一对外呛合的渐开线标准宜齿圆柱齿轮传动•耍求传动比Q42=-,女装中心距"=78刃册・若根抵强度的需如 取模数m ・3mm ・采J 耿标准齿形,齿顶髙系数";=1, 齿轮的分度19宜径、基圆直径.a' = 80/w«时,试求两齿轮的噹合角爭试确定这对齿轮的齿数z 「%并计算出大 、齿顶圆<径和齿根圆直翁 若安装中Q 字为久解' n, ______ __________ 才六.(15分)设一対心宜动尖顶推杆盘形凸顾丙雅杆W 礎 h = 16力切• "Sis 运动角①=120・。

山东科技大学——十套数据结构试题及答案

山东科技大学——十套数据结构试题及答案

数据结构试卷(一)1. 栈和队列的共同特点是()。

A.只允许在端点处插入和删除元素B.都是先进后出C.都是先进先出D.没有共同点2. 用链接方式存储的队列,在进行插入运算时().A. 仅修改头指针B. 头、尾指针都要修改C.仅修改尾指针D.头、尾指针可能都要修改3. 以下数据结构中哪一个是非线性结构? ()A.队列B.栈C.线性表D.二叉树4. 设有一个二维数组A[m][ n],假设 A[0][0]存放位置在644(io ),A[2][2]存放位置在676(i0),每个元素占一个空间, 问A[3][3](10)存放在什么位置?脚注(10)表示用10进制 表示。

A. O (1)B. O (n )C. O (1og 2n )D. O (n2) 9. 对于线性表(7, 34, 55, 25, 64, 46, 20, 10)进行散列存储时,若选用 H (K )=K %9作为散列函数,则散列地址为 1的元素有( )个, A . 1 B . 2 C . 3 D . 410. 设有6个结点的无向图,该图至少应有 ()条边才能确保是一个连通图。

A.5B.6C.7D.8二、填空题(每空 1分,共26分) 1. 通常从四个方面评价算法的质量: ___________ 、 _________ 、 __________ 和 __________。

2. 一个算法的时间复杂度为 (n 3+n 2log 2n+14n )/n 2,其数量级表示为 _________ 。

3. 假定一棵树的广义表表示为 A ( C , D (E , F , G ), H (I , J )),则树中所含的结点数 为 ___________ 个,树的深度为 ____________ ,树的度为 _________ 。

4. 后缀算式9 2 3 +- 10 2 / -的值为 ____________ 。

中缀算式(3+4X ) -2Y/3对应的后缀算式 为 _________________________________ 。

山东科技大学OJ集锦

山东科技大学OJ集锦

(1-2)Description计算两整数x和y(0<x,y<1000)的和、差、积、商、余数、x的平方和y的三次方。

Input输入只有一行,格式见sample。

Output输出为多行,按顺序每行输出x,y的和、差、积、商、余数、x的平方和y的三次方,格式见sampleSample Inputx = 11, y = 3Sample Outputx + y : 14x - y : 8x * y : 33x / y quotient: 3, remainder: 2x ^ 2 : 121y ^ 3 : 27HINT注意输入输出格式。

了解C语言整数除法运算符的特点,并且没有求幂的运算符#include <stdio.h>int main(){int x,y;0<x<1000,0<y<1000;scanf("x = %d, y = %d",&x,&y);printf("x + y : %d\n",x+y);printf("x - y : %d\n",x-y);printf("x * y : %d\n",x*y);printf("x / y quotient: %d, remainder: %d\n",x/y,x%y);printf("x ^ 2 : %d\n",x*x);printf("y ^ 3 : %d\n",y*y*y);return 0;}(1-3)Description从键盘输入圆的半径,求圆的面积和周长,圆周率取3.14。

Input输入一个浮点型数据,有效数字不会超过十进制的6位。

Output输出为两行。

第一行为圆的面积,第二行为圆的周长,格式见sample。

Sample Input3Sample OutputArea: 28.260000Perimeter: 18.840000HINT了解浮点类型的输入、输出和算术运算符#include <stdio.h>#define P 3.14int main(){float r,s,c;scanf("%f",&r);s=P*r*r;c=2*r*P;printf("Area: %f\n",s);printf("Perimeter: %f\n",c);return 0;}(1-4)Description求3个数的平均值。

山东科技大学OJ部分题目记答案

山东科技大学OJ部分题目记答案

lf %.2lf %.2lf\n",a,b,c);printf ("%.2lf %.2lf %.2lf\n",d,e,f);}d %.3o %.3x\n",x,x,x);printf ("%.3d %.3o %.3x\n",y,y,y);printf ("%.3d %.3o %.3x\n",z,z,z);}Problem A: 简单的打折计算Description商店规定:消费满n元,可以打八八折。

设某件商品标价m元,输入购买的件数x,计算出需要支付的金额(单位:元),精确到分。

Input输入只有一行,三个整数m、n和x,且0<x<m<n<1000。

Output输出金额,精确到分。

Sample Input95 300 4Sample OutputHINT了解浮点型的输出控制,注意整型和浮点型混合运算过程中的数据类型转换。

#include <>int main(){int m,n,x;float s;scanf ("%d %d %d",&m,&n,&x);if (m*x>=n)s=m*x*;elses=m*x;printf ("%.2f",s);}Problem C: 水仙花数Description如果一个三位十进制数等于其各位数字的立方和,则称这个数为水仙花数。

如:13+53+33=153。

Input一个整数x,100<=x<=999。

Outputx是水仙花数,则输出“YES”,否则为“NO”。

#include <>int main(){int x,a,b,c;scanf ("%d",&x);a=x%10;b=x/10%10;c=x/100;if(a*a*a+b*b*b+c*c*c==x)printf ("YES");elseprintf ("NO");}Problem A: 多少张钞票Description客户去商店买东西时,不超过100美金的账单喜欢用现金支付。

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

//////////Problem D: 货币兑换Description给出人民币对美元、欧元、日元的当日汇率,求给定金额的人民币能兑换成外币的金额,求给定金额的外币能兑换成人民币的金额。

要计算的外币有三种:美元、欧元、日元。

Input输入有三行。

第一行依次为美元、欧元、日元外币汇率,用空格分开。

汇率用100外币为单位,精确到小数点后4位,如668.5200表示“100美元=668.5200人民币”。

汇率浮动范围为(0,10000)。

第二行为外币金额x,第三行为人民币金额y。

x,y均为整数,且0<x,y<10000。

Output输出为两行。

第一行为金额为x的美元、欧元、日元兑换成人民币的金额,用空格分开。

第二行为金额为y的人民币兑换成美元、欧元、日元的金额,用空格分开。

所有金额精确到小数点后两位。

Sample Input668.5200 908.0685 7.985215001500Sample Output10027.80 13621.03 119.78#include <stdio.h>int main(){double i,j,k,a,b,c,d,e,f;double x,y;scanf ("%lf %lf %lf",&i,&j,&k);scanf ("%lf%lf",&x,&y);a=x/100*i;b=y/100*j;c=x/100*k;d=y*100/i;e=y*100/j;f=y*100/k;printf ("%.2lf %.2lf %.2lf\n",a,b,c);printf ("%.2lf %.2lf %.2lf\n",d,e,f);}////Problem E: 求字符的值////Description从键盘输入3个字符(不含双字节字符),分别输出每个字符的十进制值(ASCII码)、八进制值和十六进制值。

Input输入为3个字符。

Output输出为3行。

每一行为每个字符(对应输入顺序)的十进制、八进制和十六进制值,用空格分隔开。

每个输出的值占3个字符,不足3个字符前面补0。

Sample Input0 ASample Output048 060 030032 040 020065 101 041#include <stdio.h>int main(){char x,y,z;scanf ("%c%c%c",&x,&y,&z);printf ("%.3d %.3o %.3x\n",x,x,x);printf ("%.3d %.3o %.3x\n",y,y,y);printf ("%.3d %.3o %.3x\n",z,z,z);}Problem A: 简单的打折计算Description商店规定:消费满n元,可以打八八折。

设某件商品标价m元,输入购买的件数x,计算出需要支付的金额(单位:元),精确到分。

Input输入只有一行,三个整数m、n和x,且0<x<m<n<1000。

Output输出金额,精确到分。

Sample Input95 300 4Sample Output334.40HINT了解浮点型的输出控制,注意整型和浮点型混合运算过程中的数据类型转换。

#include <stdio.h>int main(){int m,n,x;float s;scanf ("%d %d %d",&m,&n,&x);if (m*x>=n)s=m*x*0.88;elses=m*x;printf ("%.2f",s);}Problem C: 水仙花数Description如果一个三位十进制数等于其各位数字的立方和,则称这个数为水仙花数。

如:13+53+33=153。

Input一个整数x,100<=x<=999。

Outputx是水仙花数,则输出“YES”,否则为“NO”。

#include <stdio.h>int main(){int x,a,b,c;scanf ("%d",&x);a=x%10;b=x/10%10;c=x/100;if(a*a*a+b*b*b+c*c*c==x)printf ("YES");elseprintf ("NO");}Problem A: 多少张钞票Description客户去商店买东西时,不超过100美金的账单喜欢用现金支付。

商店喜欢用最少的钞票给付客户的找零。

请你编写一个程序帮助商店计算出:当客户买了x元商品给了一张100美元的钞票后,商店应该付给客户多少张20美元、10美元、5美元和1美元的钞票,使得钞票总数最少。

假设不存在其他面值的钞票,也不会有几角几分的价格,商店的各种钞票总是够用的。

Input输入一个整数x,0<x<100。

Output按顺序输出20美金、10美金、5美金和1美金面值的钞票张数。

输出格式见sample。

Sample Input7Sample Output$20 bills: 4$10 bills: 1$5 bills: 0$1 bills: 3#include <stdio.h>int main(){int x,s,a,b,c,d;scanf ("%d",&x);s=100-x;a=s/20;b=(s-20*a)/10;c=(s-20*a-10*b)/5;d=s-20*a-10*b-c*5;printf ("$20 bills: %d\n",a);printf ("$10 bills: %d\n",b);printf (" $5 bills: %d\n",c);printf (" $1 bills: %d\n",d);}Problem B: 自动拨出电话的程序Sample Input(0532)621-15486Sample Output008653262115486HINT这是个可以用scanf()解决的问题,请注意电话号码都是数字这个规律。

#include <stdio.h>int main(){int a,b,c;scanf("(0%d)%d-%d",&a,&b,&c);printf("0086%d%d%d",a,b,c);}///////Problem C: 求1+2+...+n=?Description给定一个n,求出s = 1+2+3+...+n的值。

Input输入只有一行,包含一个正整数n(n<=232)。

Output输出一行,为1+2+...+n的值。

Sample Input10Sample Output55HINTn的数据范围大,需注意数据类型的选择和计算次序,以避免数据溢出。

#include <stdio.h>int main(){unsigned long long int n,s,i;scanf("%llu",&n);if(n%2==0)s=n/2*(n+1);elses=(n+1)/2*n;printf ("%llu",s);}/////////////Problem D: 2的多少次幂Description从键盘输入一个数x,x是2的整数次幂(x=2y),请编程求出y的值。

Input一个非负有理数x,x在[0,2256]范围内。

Output一个整数y。

#include <stdio.h>#include <math.h>int main(){double x,n;scanf ("%lf",&x);n=(log10(x))/(log10(2));printf ("%d",(int)n);}////Problem A: 输出是m的倍数或n的倍数、但不是m和n的公倍数的数Description输出1~k之间是m的倍数或n的倍数、但不是m和n的公倍数的数,其中1<=m,n<k<100,且m与n不相等。

Input输入三个整数,依次为k、m、 n。

Output从小到大输出符合题意的所有整数,两数之间用一个空格分开。

Sample Input15 2 3Sample Output2 3 4 8 9 10 14 15#include <stdio.h>int main(){int k,m,n,i=0,j;scanf ("%d %d %d",&k,&m,&n);for (j=1;j<=k;j++){if ((j%m==0&&j%n!=0)||(j%m!=0&&j%n==0)){i++;if(i==1)printf ("%d",j);elseprintf (" %d",j);}}}/////Problem B: n个数的最大值和最小值Description找出n个数中最大的数和最小的数,并将它们的值输出出来。

Input输入为n+1个整数,都在int类型范围内。

这些数可能用若干空格或者换行符分隔开。

输入的第1个数为n,表示后续有n个数输入。

从输入的第2个数开始,求出直到第n+1个数中最大的数和最小的数。

Sample Input3 0 1 -1Sample OutputThe maximum number is 1.The minimum number is -1.#include <stdio.h>int main(){int i,n,m,max,min;scanf ("%d%d",&n,&max);min=max;for(i=1;i<n;i++){scanf ("%d",&m);if (m>max)max=m;if(m<min)min=m;}printf("The maximum number is %d.\nThe minimum number is %d.",max,min); }Problem C: 成绩的等级Description把百分制的考试成绩转换成五级制的成绩:90~100:Excellent80~89:Good70~79:Average60~69:Pass0~59:Failing不在0~100之间的输入是非法数据,输出“Error”。

相关文档
最新文档