山东科技大学OJ部分题目记答案Word文档格式.docx
- 文档编号:4297072
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:54
- 大小:86.72KB
山东科技大学OJ部分题目记答案Word文档格式.docx
《山东科技大学OJ部分题目记答案Word文档格式.docx》由会员分享,可在线阅读,更多相关《山东科技大学OJ部分题目记答案Word文档格式.docx(54页珍藏版)》请在冰点文库上搜索。
,a,b,c);
d,e,f);
}
////ProblemE:
求字符的值////
从键盘输入3个字符〔不含双字节字符〕,分别输出每个字符的十进制值〔ASCII码〕、八进制值和十六进制值。
输入为3个字符。
输出为3行。
每一行为每个字符〔对应输入顺序〕的十进制、八进制和十六进制值,用空格分隔开。
每个输出的值占3个字符,缺乏3个字符前面补0。
0A
048060030
032040020
065101041
charx,y,z;
%c%c%c"
y,&
z);
%.3d%.3o%.3x\n"
x,x,x);
y,y,y);
z,z,z);
ProblemA:
简单的打折计算
商店规定:
消费满n元,可以打八八折。
设某件商品标价m元,输入购置的件数x,计算出需要支付的金额〔单位:
元〕,准确到分。
输入只有一行,三个整数m、n和x,且0<
x<
m<
n<
1000。
输出金额,准确到分。
953004
334.40
HINT
了解浮点型的输出控制,注意整型和浮点型混合运算过程中的数据类型转换。
{intm,n,x;
floats;
scanf("
%d%d%d"
m,&
n,&
x);
if(m*x>
=n)
s=m*x*0.88;
else
s=m*x;
printf("
%.2f"
s);
ProblemC:
水仙花数
如果一个三位十进制数等于其各位数字的立方和,那么称这个数为水仙花数。
如:
13+53+33=153。
一个整数x,100<
=x<
=999。
x是水仙花数,那么输出“YES〞,否那么为“NO〞。
intx,a,b,c;
%d"
a=x%10;
b=x/10%10;
c=x/100;
if(a*a*a+b*b*b+c*c*c==x)
YES"
);
else
NO"
多少钞票
客户去商店买东西时,不超过100美金的账单喜欢用现金支付。
商店喜欢用最少的钞票给付客户的找零。
请你编写一个程序帮助商店计算出:
当客户买了x元商品给了一100美元的钞票后,商店应该付给客户多少20美元、10美元、5美元和1美元的钞票,使得钞票总数最少。
假设不存在其他面值的钞票,也不会有几角几分的价格,商店的各种钞票总是够用的。
输入一个整数x,0<
100。
按顺序输出20美金、10美金、5美金和1美金面值的钞票数。
输出格式见sample。
7
$20bills:
4
$10bills:
1
$5bills:
0
$1bills:
3
{intx,s,a,b,c,d;
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;
%d\n"
a);
b);
c);
d);
ProblemB:
自动拨出的程序
(0532)621-15486
008653262115486
这是个可以用scanf()解决的问题,请注意都是数字这个规律。
inta,b,c;
scanf("
(0%d)%d-%d"
a,&
b,&
c);
printf("
0086%d%d%d"
///////ProblemC:
求1+2+...+n=?
给定一个n,求出s=1+2+3+...+n的值。
输入只有一行,包含一个正整数n(n<
=232)。
输出一行,为1+2+...+n的值。
10
55
n的数据围大,需注意数据类型的选择和计算次序,以防止数据溢出。
unsignedlonglongintn,s,i;
%llu"
n);
if(n%2==0)
s=n/2*(n+1);
s=(n+1)/2*n;
/////////////ProblemD:
2的多少次幂
从键盘输入一个数x,x是2的整数次幂〔x=2y〕,请编程求出y的值。
一个非负有理数x,x在[0,2256]围。
一个整数y。
math.h>
{doublex,n;
%lf"
n=(log10(x))/(log10
(2));
(int)n);
////ProblemA:
输出是m的倍数或n的倍数、但不是m和n的公倍数的数
输出1~k之间是m的倍数或n的倍数、但不是m和n的公倍数的数,其中1<
=m,n<
k<
100,且m与n不相等。
输入三个整数,依次为k、m、n。
从小到大输出符合题意的所有整数,两数之间用一个空格分开。
1523
23489101415
intk,m,n,i=0,j;
k,&
for(j=1;
j<
=k;
j++)
{
if((j%m==0&
&
j%n!
=0)||(j%m!
=0&
j%n==0))
{i++;
if(i==1)
j);
%d"
}
/////ProblemB:
n个数的最大值和最小值
找出n个数中最大的数和最小的数,并将它们的值输出出来。
输入为n+1个整数,都在int类型围。
这些数可能用假设干空格或者换行符分隔开。
输入的第1个数为n,表示后续有n个数输入。
从输入的第2个数开场,求出直到第n+1个数中最大的数和最小的数。
301-1
Themaximumnumberis1.
Theminimumnumberis-1.
inti,n,m,max,min;
%d%d"
max);
min=max;
for(i=1;
i<
n;
i++)
{scanf("
m);
if(m>
max)
max=m;
if(m<
min)
min=m;
Themaximumnumberis%d.\nTheminimumnumberis%d."
max,min);
成绩的等级
把百分制的考试成绩转换成五级制的成绩:
90~100:
Excellent
80~89:
Good
70~79:
Average
60~69:
Pass
0~59:
Failing
不在0~100之间的输入是非法数据,输出“Error〞。
输入多行,每行一个整数。
输入所对应的成绩等级。
stdlib.h>
#include"
string.h"
intn;
while(scanf("
n)!
=EOF)
if(n==100)
Excellent\n"
elseif(n<
0||n>
100)
Error\n"
switch(n/10)
{case9:
break;
case8:
Good\n"
case7:
Average\n"
case6:
Pass\n"
default:
Failing\n"
return0;
/////ProblemE:
A+BProblem(II):
Input/OutputPratice
计算a+b,0<
=a,b<
输入的第一行是一个整数N,后面有N对整数a和b,每对a和b占一行,a,b用空格分开。
每行输出一个a+b的和,顺序与输入对应。
2
12
1020
3
30
N给出了测试样例数,用for循环处理方便。
intN,i,j;
N);
inta[N][2];
for(i=0;
N;
for(j=0;
2;
a[i][j]);
%d\n"
a[i][0]+a[i][1]);
A+BProblem(III):
输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。
当测试样为00时表示输入完毕,00不参与运算。
00
{inta,b;
while
(1)
%d%d"
b);
if(a==0&
b==0)
break;
a+b);
只有一个二元运算符的表达式运算
编程序读入并计算只有一个二元运算符的表达式的值。
用到的二元运算符有:
“+〞、“-〞、“*〞、“/〞、“%〞,与C语言的语法一致。
每行输入一个表达式,格式为:
二个整型的操作数a和b,中间用一个符号分开,这个符号就是运算符。
测试样例不存在除数为0的情况。
输入以a和b为0,且用一个空格分开完毕。
每行对应输入的运算符为“+〞、“-〞、“*〞、“/〞、“%〞,那么计算a+b、a-b、a*b、a/b、a%b的值;
否那么输出“invalidop〞。
教材上有非常相似的例题可以参考。
inta,b;
chari;
%d%c%d"
b==0&
i==32)
{switch(i)
case'
+'
:
printf("
-'
a-b);
*'
a*b);
/'
a/b);
%'
a%b);
default:
invalidop\n"
ProblemD:
求100以的素数
素数是只能被1和自身整除的正整数,根据数学定义1不是素数。
素数也叫质数。
输入为两个整数m和n,满足0<
=m<
=n<
=100。
从大到小输出m~n之间的所有素数,一个素数一行。
如果m~n之间没有素数,那么不输出任何数。
输出的所有数在两行“=====〞之间。
212
=====
11
5
利用素数的数学规律可以很容易的解出此题,题目给出的数据围是关键。
intm,n,i,j,k;
=====\n"
for(i=n;
i>
=m;
i--)
{k=0;
for(j=1;
i;
if(i%j==0)
k++;
if(k==1)
i);
====="
ProblemE:
十进制整数转二进制
给出一个十进制的非负整数x,x<
=216,把它转换成二进制数输出。
输入为多行,每行一个整数x,至读入EOF完毕。
每行输出x对应的二进制数值。
inti,j,m,n,k;
inta[17];
while(scanf("
{if(n==0)
0\n"
for(m=0;
=16;
m++)
i=n%2;
j=n/2;
n=j;
a[m]=i;
for(m=16;
m>
=0;
m--)
if(a[m]==1)
{k=m;
for(m=k;
a[m]);
\n"
/////ProblemF:
辗转相除法最大公约数的算法
辗转相除法,也称欧几里得算法,是求最大公约数的算法。
输入为多行,每行有一对非负整数a,b,且a*b不会超出int类型的数据围。
输入至EOF完毕。
每行输出一对a,b的最大公约数和最小公倍数,顺序与输入对应。
从数论上的整除定义出发:
假设a整除b〔b除以a没有余数〕,那么b是a的倍数,a是b的约数,这里要求b不为0。
因此0是任意整数的倍数,但是0不能是约数。
{inta,b,c,m,t;
b)!
{if(a==0&
b!
=0)
%d%d\n"
b,a);
elseif(a!
a,b);
{if(a<
b){t=a;
a=b;
b=t;
m=a*b;
c=a%b;
while(c!
=0){a=b;
b=c;
c=a%b;
b,m/b);
}}}
简单的整数排序
对给出的假设干整数按从小到大排序。
输入的第一个数为n〔n<
=1000〕,后接n个整数。
按从小到大的顺序输出这些整数,每两个整数之间用一个空格分隔开,最后一个整数后面没有空格。
103915285673
1233556789
inti,j,n,t;
inta[1000];
for(i=0;
a[i]);
for(i=1;
for(j=0;
n-1;
if(a[j]>
a[j+1])
{t=a[j];
a[j]=a[j+1];
a[j+1]=t;
{if(i==n-1)
a[i]);
%d"
兔子的繁殖问题
假设一对兔子每月能生一对小兔〔一雌一雄〕,每对小兔出生后的下一个月是没有繁殖能力的,至出生后的第三个月开场又可以每月生一队小兔,问从一对刚出生的小兔开场,经过假设干个月后一共有多少兔子〔假设在此过程中兔子没有死亡〕?
输入的第一个数为n,接下来有n个数字。
每个数字为一个月份m〔m<
=45〕。
输出为n行,每行为第m个月后的兔子总数。
6
1234510
1235889
当n较大时,菲波那契序列的第n项值和计算量都是很大的,可以先计算出菲波那契序列并用数组存储下来,然后查询出每月兔子数,防止重复运算。
inti,j,k,n;
inta[50]={0,1,2},b[50];
for(i=3;
=45;
a[i]=a[i-1]+a[i-2];
j);
for(k=0;
j;
k++)
b[k]);
a[b[k]]);
//////ProblemC:
产生等差序列之一
根据给出的初始数、公差和序列长度求等差序列。
输入为一行,格式见sample。
其中,start为初始数,step为公差,times为序列长度。
满足,times>
0,step不为0。
把这个等差序列输出在一行里,序列两数之间用一个空格分隔。
start=1,step=2,times=100
13579111315171921232527293133353739414345474951535557596163656769717375777981838587899193959799101103105107109111113115117119121123125127129131133135137139141143145147149151153155157159161163165167169171173175177179181183185187189191193195197199
AppendCode
chard[100],b[100],c[100];
start=%d,step=%d,times=%d"
for(n=0;
k;
n++)
a[n]=i+j*n;
if(n==k-1)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 山东 科技大学 OJ 部分 题目 答案