信息学奥赛⼀本通第⼀部分第⼆章顺序结构程序设计第四到五节
**总结:做完这些题⽬,最⼤的收获就是:
⼀定要注意数据范围和数据类型,必要的时候强制转换**
说简单点,就是
注意审题
第四节数据输⼊输出
1024:保留3位⼩数的浮点数
【题⽬描述】
读⼊⼀个单精度浮点数,保留3位⼩数输出这个浮点数。
【输⼊】
只有⼀⾏,⼀个单精度浮点数。
【输出】
也只有⼀⾏,读⼊的单精度浮点数。
#include
#include
usingnamespacestd;
intmain(){
floata;
cin>>a;
printf("%.3f",a);
return0;
}
1025:保留12位⼩数的浮点数
【题⽬描述】
读⼊⼀个双精度浮点数,保留12位⼩数,输出这个浮点数。
【输⼊】
只有⼀⾏,⼀个双精度浮点数。
【输出】
也只有⼀⾏,保留12位⼩数的浮点数。
#include
#include
usingnamespacestd;
intmain(){
doublea;
cin>>a;
printf("%.12f",a);
return0;
}
1026:空格分隔输出
【题⽬描述】
读⼊⼀个字符,⼀个整数,⼀个单精度浮点数,⼀个双精度浮点数,然后按顺序输出它们,并且要求在他们之间⽤⼀个空格分隔。输出浮点
数时保留6位⼩数。
【输⼊】
第⼀⾏是⼀个字符;
第⼆⾏是⼀个整数;
第三⾏是⼀个单精度浮点数;
第四⾏是⼀个双精度浮点数。
#include
#include
usingnamespacestd;
intmain(){
doublea;
floatb;
charc;
intd;
cin>>c>>d>>b>>a;
printf("%c%d%.6f%.6lf",c,d,b,a);
return0;
}
1027:输出浮点数
【题⽬描述】
读⼊⼀个双精度浮点数,分别按输出格式“%f”,“%f”保留5位⼩数,“%e”和“%g”的形式输出这个整数,每次在单独⼀⾏上输出。
【输⼊】
⼀个双精度浮点数。
【输出】
第⼀⾏是按“%f”输出的双精度浮点数;
第⼆⾏是按“%f”保留5位⼩数输出的双精度浮点数;
第三⾏是按“%e”输出的双精度浮点数;
第四⾏是按“%g”输出的双精度浮点数。
#include
#include
usingnamespacestd;
intmain(){
doublea;
cin>>a;
printf("%lfn%.5lfn%en%g",a,a,a,a);
return0;
}
1028:字符菱形
【题⽬描述】
给定⼀个字符,⽤它构造⼀个对⾓线长5个字符,倾斜放置的菱形。
【输⼊】
输⼊只有⼀⾏,包含⼀个字符。
【输出】
该字符构成的菱形。
【样例】
#include
#include
usingnamespacestd;
intmain(){
chara;
cin>>a;
return0;
}
第五节顺序结构实例
1029:计算浮点数相除的余
【题⽬描述】
计算两个双精度浮点数a和b的相除的余数,aa和bb都是双精度浮点数。这⾥余数(r)(r)的定义是:a=k×b+ra=k×b+r,其中kk是整
数,0≤r
【输⼊】
输⼊仅⼀⾏,包括两个双精度浮点数aa和bb。
【输出】
输出也仅⼀⾏,a÷ba÷b的余数。
#include
usingnamespacestd;
intmain(){
doublea,b;
intc;
cin>>a>>b;
c=(int)a/b;
cout<
return0;
}
1030:计算球的体积
【题⽬描述】
对于半径为r的球,其体积的计算公式为V=4/3πr,这⾥取π=3.14。现给定r,即球半径,类型为double,求球的体积V,保留到⼩数
点后22位。
【输⼊】
输⼊为⼀个不超过100的⾮负实数,即球半径,类型为double。
【输出】
输出⼀个实数,即球的体积,保留到⼩数点后2位。
#include
#include
#include
usingnamespacestd;
intmain(){
doubler,v;
cin>>r;
v=4/3.0*3.14*(pow(r,3));
printf("%.2lf",v);
return0;
}
3
1031:反向输出⼀个三位数
【题⽬描述】
将⼀个三位数反向输出,例如输⼊358,反向输出853。
【输⼊】
⼀个三位数n。
【输出】
反向输出n。
#include
usingnamespacestd;
intmain(){
inta;
cin>>a;
return0;
}
1032:⼤象喝⽔查
【题⽬描述】
⼀只⼤象⼝渴了,要喝20升⽔才能解渴,但现在只有⼀个深h厘⽶,底⾯半径为r厘⽶的⼩圆桶(h和r都是整数)。问⼤象⾄少要喝多少桶⽔才
会解渴。
【输⼊】
输⼊有⼀⾏:包⾏两个整数,以⼀个空格分开,分别表⽰⼩圆桶的深h和底⾯半径r,单位都是厘⽶。
【输出】
输出⼀⾏,包含⼀个整数,表⽰⼤象⾄少要喝⽔的桶数。
#include
#include
#definePI3.14
usingnamespacestd;
intmain(){
doubleh,r;
doublev;
cin>>h>>r;
v=r*r*PI*h;
cout<<(int)ceil(20000/v);//注意这⾥要强制类型转换为整型,ceil()为向上取整
return0;
}
1033:计算线段长度
【题⽬描述】
已知线段的两个端点的坐标A(Xa,Ya),B(Xb,Yb),求线段AB的长度,保留到⼩数点后3位。
【输⼊】
第⼀⾏是两个实数Xa,Ya,即A的坐标。
第⼆⾏是两个实数Xb,Yb,即B的坐标。
输⼊中所有实数的绝对值均不超过10000。
【输出】
⼀个实数,即线段AB的长度,保留到⼩数点后3位。
#include
#include
#include
usingnamespacestd;
intmain(){
doublexa,ya,xb,yb;
doublex,y,l;
cin>>xa>>ya>>xb>>yb;
x=xa>xb?xa-xb:xb-xa;//这⾥?:为⼀个三⽬运算符,防⽌计算出现负数
y=ya>yb?ya-yb:yb-ya;
l=sqrt(pow(x,2)+pow(y,2));
printf("%.3lf",l);
return0;
}
1034:计算三⾓形⾯积
【题⽬描述】
平⾯上有⼀个三⾓形,它的三个顶点坐标分别为(x1,y1),(x2,y2),(x3,y3),那么请问这个三⾓形的⾯积是多少,精确到⼩数点后两位。
【输⼊】
输⼊仅⼀⾏,包括6个单精度浮点数,分别对应x1,y1,x2,y2,x3,y3。
【输出】
输出也是⼀⾏,输出三⾓形的⾯积,精确到⼩数点后两位。
#include
#include
#include
usingnamespacestd;
doublelength(doublexa,doubleya,doublexb,doubleyb){
//这⾥借⽤上⼀题的计算长度的代码,求两点间距离
doublel,x,y;
x=xa>xb?xa-xb:xb-xa;
y=ya>yb?ya-yb:yb-ya;
l=sqrt(pow(x,2)+pow(y,2));
returnl;
}
intmain(){
doublex1,y1,x2,y2,x3,y3;
cin>>x1>>y1>>x2>>y2>>x3>>y3;
doublea,b,c,p,s;
a=length(x1,y1,x2,y2);
b=length(x2,y2,x3,y3);
c=length(x1,y1,x3,y3);
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));//海伦-秦九韶公式求⾯积
printf("%.2lf",s);
return0;
}
1035:等差数列末项计算
【题⽬描述】
给出⼀个等差数列的前两项a1,a2,求第nn项是多少。
【输⼊】
⼀⾏,包含三个整数a1,a2,n。−100≤a1,a2≤100,0
【输出】
⼀个整数,即第n项的值。
#include
usingnamespacestd;
intmain(){
inta1,a2,n;
cin>>a1>>a2>>n;
cout<
return0;
}
1036:A×B问题
【题⽬描述】
输⼊两个正整数A和B,求A×B的值。注意乘积的范围和数据类型的选择。
【输⼊】
⼀⾏,包含两个正整数A和B,中间⽤单个空格隔开。1≤A,B≤50000。
【输出】
⼀个整数,即A×B的值。
#include
usingnamespacestd;
intmain(){
unsignedlonglonga,b,c;//⼀开始开longlong,居然不够,ull才⾏
cin>>a>>b;
c=a*b;
cout<
return0;
}
1037:计算2的幂
【题⽬描述】
给定⾮负整数n,求2n的值,即2的n次⽅。
【输⼊】
⼀个整数nn。0≤n<31。
【输出】
⼀个整数,即2的n次⽅。
#include
#include
#include
usingnamespacestd;
intmain(){
intn;
cin>>n;
unsignedlonglongs=pow(2,n);//这⾥还是数据类型的问题,2的31次⽅是longlong的最⼤范围
cout<
return0;
}
1038:苹果和⾍⼦
【题⽬描述】
你买了⼀箱n个苹果,很不幸的是买完时箱⼦⾥混进了⼀条⾍⼦。⾍⼦每x⼩时能吃掉⼀个苹果,假设⾍⼦在吃完⼀个苹果之前不会吃另⼀
个,那么经过y⼩时你还有多少个完整的苹果?
【输⼊】
输⼊仅⼀⾏,包括n,x和y(均为整数)。
【输出】
输出也仅⼀⾏,剩下的苹果个数。
#include
#include
usingnamespacestd;
intmain(){
intn,x,y;
cin>>n>>x>>y;
intl=(int)ceil((double)y/(double)x);//这⾥要强制转换两次(只⼀次都不⾏,亲测会wa)
cout<<(n>l?n-l:0);//这⾥还要判断⼀下⼤⼩,不然会有负数wa⼀个点
return0;
}
End
PS:2019.8.12AC全部
本文发布于:2022-11-13 20:50:02,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/88/13268.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |