信息学奥赛一本通 第一部分 第二章 顺序结构程序设计 第四到五节

**总结:做完这些题目,最大的收获就是:

一定要注意数据范围和数据类型,必要的时候强制转换**

说简单点,就是

注意审题

第四节 数据输入输出

1024: 保留3位小数的浮点数

【题目描述】
读入一个单精度浮点数,保留3位小数输出这个浮点数。

【输入】
只有一行,一个单精度浮点数。

【输出】
也只有一行,读入的单精度浮点数。

#include
#include
using namespace std;
int main(){
	float a;
	cin>>a;
	printf("%.3f",a);
	return 0;
}

1025:保留12位小数的浮点数

【题目描述】
读入一个双精度浮点数,保留12位小数,输出这个浮点数。

【输入】
只有一行,一个双精度浮点数。

【输出】
也只有一行,保留12位小数的浮点数。

#include
#include
using namespace std;
int main(){
	double a;
	cin>>a;
	printf("%.12f",a);
	return 0;
}

1026:空格分隔输出

【题目描述】
读入一个字符,一个整数,一个单精度浮点数,一个双精度浮点数,然后按顺序输出它们,并且要求在他们之间用一个空格分隔。输出浮点数时保留6位小数。

【输入】
第一行是一个字符;

第二行是一个整数;

第三行是一个单精度浮点数;

第四行是一个双精度浮点数。

#include
#include
using namespace std;
int main(){
	double a;
	float b;
	char c;
	int d;
	cin>>c>>d>>b>>a;
	printf("%c %d %.6f %.6lf",c,d,b,a);
	return 0;
}

1027:输出浮点数

【题目描述】
读入一个双精度浮点数,分别按输出格式“%f”,“%f”保留5位小数,“%e”和“%g”的形式输出这个整数,每次在单独一行上输出。

【输入】
一个双精度浮点数。

【输出】
第一行是按“%f”输出的双精度浮点数;

第二行是按“%f”保留5位小数输出的双精度浮点数;

第三行是按“%e”输出的双精度浮点数;

第四行是按“%g”输出的双精度浮点数。

#include
#include
using namespace std;
int main(){
	double a;
	cin>>a;
	printf("%lf\n%.5lf\n%e\n%g",a,a,a,a);
	return 0;
}

1028:字符菱形

【题目描述】
给定一个字符,用它构造一个对角线长5个字符,倾斜放置的菱形。

【输入】
输入只有一行, 包含一个字符。

【输出】
该字符构成的菱形。

【样例】
在这里插入图片描述

#include
#include
using namespace std;
int main(){
	char a;
	cin>>a;
	cout<<"  "<

第五节 顺序结构实例

1029:计算浮点数相除的余

【题目描述】
计算两个双精度浮点数a和b的相除的余数,aa和bb都是双精度浮点数。这里余数(r)(r)的定义是:a=k×b+ra=k×b+r,其中kk是整数,0≤r

【输入】
输入仅一行,包括两个双精度浮点数aa和bb。

【输出】
输出也仅一行,a÷ba÷b的余数。

#include
using namespace std;
int main(){
	double a,b;
	int c;
	cin>>a>>b;
	c=(int)a/b;
	cout<

1030:计算球的体积

【题目描述】
对于半径为 r的球,其体积的计算公式为V=4/3πr3,这里取 π=3.14。现给定 r,即球半径,类型为double,求球的体积V,保留到小数点后22位。

【输入】
输入为一个不超过 100 的非负实数,即球半径,类型为double。

【输出】
输出一个实数,即球的体积,保留到小数点后 2 位。

#include
#include
#include
using namespace std;
int main(){
	double r,v;
	cin>>r;
	v=4/3.0*3.14*(pow(r,3));
	printf("%.2lf",v);
	return 0;
}

1031:反向输出一个三位数

【题目描述】
将一个三位数反向输出,例如输入358,反向输出853。

【输入】
一个三位数n。

【输出】
反向输出n。

#include
using namespace std;
int main(){
	int a;
	cin>>a;
	cout<

1032:大象喝水查

【题目描述】
一只大象口渴了,要喝20升水才能解渴,但现在只有一个深h厘米,底面半径为r厘米的小圆桶(h和r都是整数)。问大象至少要喝多少桶水才会解渴。

【输入】
输入有一行:包行两个整数,以一个空格分开,分别表示小圆桶的深h和底面半径r,单位都是厘米。

【输出】
输出一行,包含一个整数,表示大象至少要喝水的桶数。

#include
#include
#define PI 3.14
using namespace std;
int main(){
	double h,r;
	double v;
	cin>>h>>r;
	v=r*r*PI*h;
	cout<<(int)ceil(20000/v); //注意这里要强制类型转换为整型,ceil()为向上取整
	return 0;
}

1033:计算线段长度

【题目描述】
已知线段的两个端点的坐标A(Xa,Ya),B(Xb,Yb),求线段AB的长度,保留到小数点后3位。

【输入】
第一行是两个实数Xa,Ya,即A的坐标。

第二行是两个实数Xb,Yb,即B的坐标。

输入中所有实数的绝对值均不超过10000。

【输出】
一个实数,即线段AB的长度,保留到小数点后3位。

#include
#include
#include
using namespace std;
int main(){
	double xa,ya,xb,yb;
	double x,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);
	return 0;
}

1034:计算三角形面积

【题目描述】
平面上有一个三角形,它的三个顶点坐标分别为(x1,y1),(x2,y2),(x3,y3),那么请问这个三角形的面积是多少,精确到小数点后两位。

【输入】
输入仅一行,包括6个单精度浮点数,分别对应x1,y1,x2,y2,x3,y3。

【输出】
输出也是一行,输出三角形的面积,精确到小数点后两位。

#include
#include
#include
using namespace std;
double length(double xa,double ya,double xb,double yb){
//这里借用上一题的计算长度的代码,求两点间距离
	double l,x,y;
	x=xa>xb?xa-xb:xb-xa;
	y=ya>yb?ya-yb:yb-ya;
	l=sqrt(pow(x,2)+pow(y,2));
	return l;
}
int main(){
	double x1,y1,x2,y2,x3,y3;
	cin>>x1>>y1>>x2>>y2>>x3>>y3;
	double a,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);
	return 0;
}

1035:等差数列末项计算

【题目描述】
给出一个等差数列的前两项a1,a2,求第nn项是多少。

【输入】
一行,包含三个整数a1,a2,n。−100≤a1,a2≤100,0

【输出】
一个整数,即第n项的值。

#include
using namespace std;
int main(){
	int a1,a2,n;
	cin>>a1>>a2>>n;
	cout<

1036:A×B问题

【题目描述】
输入两个正整数A和B,求A×B的值。注意乘积的范围和数据类型的选择。

【输入】
一行,包含两个正整数A和B,中间用单个空格隔开。1≤A,B≤50000。

【输出】
一个整数,即 A×B的值。

#include
using namespace std;
int main(){
	unsigned long long a,b,c;//一开始开long long,居然不够,ull才行
	cin>>a>>b;
	c=a*b;
	cout<

1037:计算2的幂

【题目描述】
给定非负整数n,求2n的值,即2的n次方。

【输入】
一个整数nn。0≤n<31。

【输出】
一个整数,即2的n次方。

#include
#include
#include
using namespace std;
int main(){
	int n;
	cin>>n;
	unsigned long long s=pow(2,n);//这里还是数据类型的问题,2的31次方是long long的最大范围
	cout<

1038:苹果和虫子

【题目描述】
你买了一箱n个苹果,很不幸的是买完时箱子里混进了一条虫子。虫子每x小时能吃掉一个苹果,假设虫子在吃完一个苹果之前不会吃另一个,那么经过y小时你还有多少个完整的苹果?

【输入】
输入仅一行,包括n,x和y(均为整数)。

【输出】
输出也仅一行,剩下的苹果个数。

#include
#include
using namespace std;
int main(){
	int n,x,y;
	cin>>n>>x>>y;
	int l=(int)ceil((double)y/(double)x);//这里要强制转换两次(只一次都不行,亲测会wa)
	cout<<(n>l?n-l:0);//这里还要判断一下大小,不然会有负数wa一个点
	return 0;
}

End
PS:2019.8.12 AC全部

你可能感兴趣的:(信息学奥赛一本通,C++)