信息学奥赛一本通 第五版(C++版)

信息学奥赛一本通 第五版(C++版)第一部分 C++语言

  • 第一章 C++语言入门
    • 第二节 C++语言程序设计 P15
      • 1. 编写一个能够输出Hello,World!的程序,这个程序常常作为一个初学者接触一门新的编程语言所写的第一个程序,也经常用来测试开发、编译环境是否能够正常工作。
      • 2.输入三个整数,整数之间由一个空格分隔,整数是32位有符号整数。把第二个输入的整数输出。
      • 3.读入三个整数,按每个整数占8个字符的宽度,右对齐输出它们,按照格式要求依次输出三个整数,之间以一个空格分开。
      • 4.给定一个字符,用它构造一个底边长5个字符,高3 33个字符的等腰字符三角形。
      • 5.假设地球上的新生资源按恒定速度增长。照此测算,地球上现有资源加上新生资源可供x xx亿人生活a aa年,或供y yy亿人生活b bb年。
  • 第二章 顺序结构程序设计
    • 第二节 运算符和表达式 P22
      • 1.T1006 : A+B问题
      • 2.T1007 : 计算(a+b)×c的值
      • 3.T1008 : 计算(a+b)/c的值
      • 4.T1009 : 带余除法
      • 5.T1010 : 计算分数的浮点数值
    • 第三节 常量和变量 P25
      • 1.T1011 : 甲流疫情死亡率
      • 2.T1012 : 计算多项式的值
      • 3.T1013 : 温度表达转化
      • 4.T1014 : 与圆相关的计算
      • 5.T1015 : 计算并联电阻的阻值
    • 第三节 标准数据类型 P29
      • 1.T1016 : 整型数据类型存储空间大小
      • 2.T1017 : 浮点型数据类型存储空间大小
      • 3.T1018 : 其他数据类型存储空间大小
      • 4.T1019 : 浮点数向0舍入
      • 5.T1020 : 打印ASCII码
      • 6.T1021 : 打印字符
      • 7.T1022 : 整型与布尔型的转换
      • 8.T1023 : Hello,World!的大小
    • 第五节 数据输入输出 P36
      • 1.T1024 : 保留3位小数的浮点数
      • 2.T1025 : 保留12位小数的浮点数
      • 3.T1026 : 空格分隔输出
      • 4.T1027 : 输出浮点数
      • 5.T1028 : 字符菱形
    • 第六节 顺序结构实例 P39
      • 1.T1029 : 计算浮点数相除的余
      • 2.T1030 : 计算球的体积
      • 3.T1031 : 反向输出一个三位数
      • 4.T1032 : 大象喝水查
      • 5.T1033 : 计算线段长度
      • 6.T1034 : 计算三角形面积
      • 7.T1036 : A×B问题
      • 8.T1037 : 计算2的幂
      • 9.T1038 : 苹果和虫子
  • 第三章 程序的控制结构
    • 第二节 if选择结构 P47
      • 1.T1039 : 判断数正负
      • 2.T1040 : 输出绝对值
      • 3.T1041 : 奇偶数判断
      • 4.T1042 : 奇偶ASCII值判断
      • 5.T1043 : 整数大小比较
      • 6.T1044 : 判断是否为两位数
      • 7.T1045 : 收集瓶盖赢大奖
      • 8.T1046 : 判断一个数能否同时被3和5整除
      • 9.T1047 : 判断能否被3,5,7整除
      • 10.T1048 : 有一门课不及格的学生
    • 第三节 switch语句 P52
      • 1.T1049 : 晶晶赴约会
      • 2.T1050 : 骑车与走路
      • 3.T1051 : 分段函数
      • 4.T1052 : 计算邮资
      • 5.T1053 : 最大数输出
      • 6.T1054 : 三角形判断
      • 7.T1055 : 判断闰年
      • 8.T1056 : 点和正方形的关系
      • 9.T1057 : 简单计算器
      • 10.T1058 : 求一元二次方程

第一章 C++语言入门

第二节 C++语言程序设计 P15

1. 编写一个能够输出Hello,World!的程序,这个程序常常作为一个初学者接触一门新的编程语言所写的第一个程序,也经常用来测试开发、编译环境是否能够正常工作。

提示:Hello,World!中间没空格。
  程序:
#include
using namespace std;
int main(){
cout<<“Hello,World!”<输出字符串"Hello,World!"/
return 0; /退出主函数/
}
【输入】  无
【输出】  Hello,World!

2.输入三个整数,整数之间由一个空格分隔,整数是32位有符号整数。把第二个输入的整数输出。

程序:
#include
using namespace std;
int main(){
int n; /定义变量n/
scanf("%*d%d%*d",&n); /读入三个整数,其中对第一、三个整数不进行操作,将第二个整数的值赋给n/
cout<输出n的值/
return 0; /退出主函数/
}
【输入】  123 456 789
【输出】  456

3.读入三个整数,按每个整数占8个字符的宽度,右对齐输出它们,按照格式要求依次输出三个整数,之间以一个空格分开。

程序:
#include
using namespace std;
int main(){
int a,b,c; /定义三个变量a,b,c/
cin>>a>>b>>c; /输入a,b,c的值/
printf("%8d %8d %8d",a,b,c); /%8d,每个整数占8个字符的宽度,输出a,b,c的值/
return 0; /退出主函数/
}
【输入】  123456789 0 -1
【输出】  123456789 0 -1

4.给定一个字符,用它构造一个底边长5个字符,高3 33个字符的等腰字符三角形。

【输入】输入只有一行,包含一个字符。
【输出】该字符构成的等腰三角形,底边长5 55个字符,高3 33个字符。
程序:
#include
using namespace std;
int main(){
char ch; /定义字符变量ch/
cin>>ch; /输入字符ch/
printf(" %c \n",ch);
printf(" %c%c%c \n",ch,ch,ch);
printf("%c%c%c%c%c",ch,ch,ch,ch,ch); /输出三角形/
return 0; /退出主函数/
}
【输入】  *
【输出】
*


*****

5.假设地球上的新生资源按恒定速度增长。照此测算,地球上现有资源加上新生资源可供x xx亿人生活a aa年,或供y yy亿人生活b bb年。

为了能够实现可持续发展,避免资源枯竭,地球最多能够养活多少亿人?
【输入】一行,包括四个正整数x,a,y,b,两个整数之间用单个空格隔开。x>y,a 【输出】一个实数z,表示地球最多养活z亿人,舍入到小数点后两位。
程序:
#include
using namespace std;
int main(){
double a,x,b,y; /定义题中变量/
cin>>x>>a>>y>>b; /输入x,a,y,b的值/
double z=(by-ax)/(b-a); /经过数学分析可得z=(by-ax)/(b-a)/
printf("%.2f",z); /输出z的值/
return 0; /退出主函数/
}

第二章 顺序结构程序设计

第二节 运算符和表达式 P22

1.T1006 : A+B问题

大部分的在线题库,都会将A+B问题作为第一题,以帮助新手熟悉平台的使用方法。
  A+B问题的题目描述如下:给定两个整数A和B,输出A+B的值。保证A,B 及结果均在整型范围内。现在请你解决这一问题。
【输入】一行,包含两个整数A,B,中间用单个空格隔开。A和B均在整型范围内。
【输出】一个整数,即A+B的值。保证结果在整型范围内。
【输入样例】1 2
【输出样例】3
程序:
#include
using namespace std;
int main(){
int a,b; /定义a,b两个变量/
cin>>a>>b; /输入两个整数,即a,b的值/
cout<输出a+b的值/
return 0; /退出主函数/
}

2.T1007 : 计算(a+b)×c的值

给定3个整数a,b,c,计算表达式(a+b)×c的值。
【输入】输入仅一行,包括三个整数a,b,c, 数与数之间以一个空格分开。(-10,000 【输出】输出一行,即表达式的值。
【输入样例】2 3 5
【输出样例】25
程序:
#include
using namespace std;
int main(){
int a,b,c;
cin>>a>>b>>c;
cout<<(a+b)*c< return 0; /退出主函数/
}

3.T1008 : 计算(a+b)/c的值

给定3个整数a,b,c,计算表达式(a+b)÷c的值。
【输入】输入仅一行,包括三个整数a,b,c, 数与数之间以一个空格分开。(-10,000 【输出】输出一行,即表达式的值。
【输入样例】1 1 3
【输出样例】0
程序:
#include
using namespace std;
int main(){
int a,b,c;
cin>>a>>b>>c;
cout<<(a+b)/c< return 0; /退出主函数/
}

4.T1009 : 带余除法

给定被除数和除数,求整数商及余数。此题中请使用默认的整除和取余运算,无需对结果进行任何特殊处理。
【输入】一行,包含两个整数,依次为被除数和除数(除数非零),中间用一个空格隔开。
【输出】一行,包含两个整数,依次为整数商和余数,中间用一个空格隔开。
【输入样例】10 3
【输出样例】3 1
程序:
#include
using namespace std;
int main(){
int a,b;
cin>>a>>b;
cout< return 0;
}

5.T1010 : 计算分数的浮点数值

两个整数a和b分别作为分子和分母,既分数a/b ,求它的浮点数值(双精度浮点数,保留小数点后9位)。
【输入】输入仅一行,包括两个整数a和b。
【输出】输出也仅一行,分数a/b 的浮点数值(双精度浮点数,保留小数点后9 位)。
【输入样例】5 7
【输出样例】0.714285714
程序:
#include
using namespace std;
int main(){
double a,b;
cin>>a>>b;
printf("%.9f",a/b);
return 0;
}

第三节 常量和变量 P25

1.T1011 : 甲流疫情死亡率

甲流并不可怕,在中国,它的死亡率并不是很高。请根据截止2009 年12 月22日各省报告的甲流确诊数和死亡数,计算甲流在各省的死亡率。
【输入】输入仅一行,有两个整数,第一个为确诊数,第二个为死亡数。
【输出】输出仅一行,甲流死亡率,以百分数形式输出,精确到小数点后3位。
【输入样例】10433 60
【输出样例】0.575%
程序:
#include
using namespace std;
int main(){
double a,b;
cin>>a>>b;
printf("%.3f%%",b/a*100);
return 0;
}

2.T1012 : 计算多项式的值

对于多项式f(x)=ax3+bx2+cx+d和给定的a,b,c,d,x,计算f(x)的值,保留到小数点后7位。
【输入】输入仅一行,包含5个实数,分别是x,及参数a,b,c,d的值,每个数都是绝对值不超过100的双精度浮点数。数与数之间以一个空格分开。
【输出】输出一个实数,即f(x)的值,保留到小数点后7位。
【输入样例】2.31 1.2 2 2 3
【输出样例】33.0838692
程序:
#include
using namespace std;
int main(){
double a,b,c,d,x,y;
cin>>x>>a>>b>>c>>d;
y=axxx+bxx+cx+d;
printf("%.7f",y);
return 0;
}

3.T1013 : 温度表达转化

利用公式C=5×(F−32)÷9(其中C表示摄氏温度,F表示华氏温度)进行计算转化,输入华氏温度F,输出摄氏温度C,要求精确到小数点后5位。
【输入】输入一行,包含一个实数F,表示华氏温度。(F≥−459.67)
【输出】输出一行,包含一个实数,表示对应的摄氏温度,要求精确到小数点后5位。
【输入样例】41
【输出样例】5.00000
程序:
#include
using namespace std;
int main(){
double F,C;
cin>>F;
C=5*(F-32)/9;
printf("%.5f",C);
return 0;
}

4.T1014 : 与圆相关的计算

给出圆的半径,求圆的直径、周长和面积。输入圆的半径实数r,输出圆的直径、周长、面积,每个数保留小数点后4位。圆周率取值为3.14159 。
【输入】输入包含一个实数r(0 【输出】输出一行,包含三个数,分别表示圆的直径、周长、面积,数与数之间以一个空格分开,每个数保留小数点后4位。
【输入样例】3.0
【输出样例】6.0000 18.8495 28.2743
程序:
#include
using namespace std;
#define PI 3.14159
int main(){
double r;
cin>>r;
printf("%.4f %.4f %.4f",2r,2rPI,rr*PI);
return 0;
}

5.T1015 : 计算并联电阻的阻值

对于阻值为r1 和r2 的电阻,其并联电阻阻值公式计算如下:R=1/(1/r1+1/r2) 。输入两个电阻阻抗大小,浮点型。输出并联之后的阻抗大小,结果保留小数点后2位。
【输入】两个电阻阻抗大小,浮点型,以一个空格分开。
【输出】并联之后的阻抗大小,结果保留小数点后2位。
【输入样例】1 2
【输出样例】0.67
程序:
#include
using namespace std;
int main(){
double r1,r2;
cin>>r1>>r2;
printf("%.2f",1/(1/r1+1/r2));
return 0;
}

第三节 标准数据类型 P29

1.T1016 : 整型数据类型存储空间大小

分别定义int,short类型的变量各一个,并依次输出它们的存储空间大小(单位:字节)。
【输入】无。
【输出】一行,两个整数,分别是两个变量的存储空间大小,用一个空格隔开。
程序:
#include
using namespace std;
int main(){
cout< return 0;
}

2.T1017 : 浮点型数据类型存储空间大小

分别定义float,double类型的变量各一个,并依次输出它们的存储空间大小(单位:字节)。
【输入】无。
【输出】一行,两个整数,分别是两个变量的存储空间大小,用一个空格隔开。
程序:
#include
using namespace std;
int main(){
cout< return 0;
}

3.T1018 : 其他数据类型存储空间大小

分别定义bool,char类型的变量各一个,并依次输出它们的存储空间大小(单位:字节)。
【输入】无。
【输出】一行,两个整数,分别是两个变量的存储空间大小,用一个空格隔开。
程序:
#include
using namespace std;
int main(){
cout< return 0;
}

4.T1019 : 浮点数向0舍入

输入一个单精度浮点数,将其向零舍入到整数。说明:向零舍入的含义是,正数向下舍入,负数向上舍入。提示:可以使用强制类型转换来实现。
【输入】一个单精度浮点数。
【输出】一个整数,即向零舍入到整数的结果。
【输入样例】2.3
【输出样例】2
#include
using namespace std;
int main(){
double num;
cin>>num;
cout<<(int)num< return 0;
}

5.T1020 : 打印ASCII码

输入一个除空格以外的可见字符(保证在函数scanf中可使用格式说明符%c读入),输出其ASCII码。
【输入】  一个除空格以外的可见字符。
【输出】  一个十进制整数,即该字符的ASCII码。
【输入样例】A
【输出样例】65
程序:
#include
using namespace std;
int main(){
char ch;
scanf("%c",&ch);
printf("%d",ch);
return 0;
}

6.T1021 : 打印字符

输入一个整数,即字符的ASCII码,保证存在对应的可见字符。输出相对应的字符。
【输入】一个整数,即字符的ASCII码,保证存在对应的可见字符。
【输出】一行,包含相应的字符。
【输入样例】65
【输出样例】A
程序:
#include
using namespace std;
int main(){
int ch;
scanf("%d",&ch);
printf("%c",ch);
return 0;
}

7.T1022 : 整型与布尔型的转换

将一个整型变量的值赋给一个布尔型变量,再将这个布尔型变量的值赋给一个整型变量,得到的值是多少?
【输入】一个整型范围内的整数,即初始时整型变量的值。
【输出】一个整数,经过上述过程后得到的结果。
【输入样例】3
【输出样例】1
程序:
#include
using namespace std;
int main(){
int n;
scanf("%d",&n);
bool temp=n;
n=temp;
printf("%d",n);
return 0;
}

8.T1023 : Hello,World!的大小

我们曾经输出过的"Hello, World!"吗?它虽然不是本章所涉及的基本数据类型的数据,但我们同样可以用sizeof函数获得它所占用的空间大小。
【输入】  (无)
【输出】  一个整数,即"Hello, World!"的大小。
程序:
#include
using namespace std;
int main(){
cout< return 0;
}

第五节 数据输入输出 P36

1.T1024 : 保留3位小数的浮点数

读入一个单精度浮点数,保留3位小数输出这个浮点数。
【输入】  一行,一个单精度浮点数。
【输出】  一行,读入的单精度浮点数。
【输入样例】12.34521
【输出样例】12.345
程序:
#include
using namespace std;
int main(){
double num;
cin>>num;
printf("%.3f",num);
return 0;
}

2.T1025 : 保留12位小数的浮点数

读入一个双精度浮点数,保留12位小数,输出这个浮点数。
【输入】一行,一个双精度浮点数。
【输出】一行,保留12位小数的浮点数。
【输入样例】3.1415926535798932
【输出样例】3.141592653580
程序:
#include
using namespace std;
int main(){
double num;
cin>>num;
printf("%.12lf",num);
return 0;
}

3.T1026 : 空格分隔输出

读入一个字符,一个整数,一个单精度浮点数,一个双精度浮点数,然后按顺序输出它们,并且要求在他们之间用一个空格分隔。输出浮点数时保留6 位小数。
【输入】  第一行是一个字符;
  第二行是一个整数;
  第三行是一个单精度浮点数;
  第四行是一个双精度浮点数。
【输出】输出字符、整数、单精度浮点数和双精度浮点数,之间用空格分隔。
【输入样例】
a
12
2.3
3.2
【输出样例】a 12 2.300000 3.200000
程序:
#include
using namespace std;
int main(){
char ch;
int n;
double a,b;
cin>>ch>>n>>a>>b;
printf("%c %d %.6f %.6f",ch,n,a,b);
return 0;
}

4.T1027 : 输出浮点数

读入一个双精度浮点数,分别按输出格式%f,%f保留5位小数,%e和%g的形式输出这个整数,每次在单独一行上输出。
【输入】  一个双精度浮点数。
【输出】
  第一行是按%f输出的双精度浮点数;
  第二行是按%f保留5 55位小数输出的双精度浮点数;
  第三行是按%e输出的双精度浮点数;
  第四行是按%g输出的双精度浮点数。
【输入样例】12.3456789
【输出样例】
12.345679
12.34568
1.234568e+001
12.3457
程序:
#include
using namespace std;
int main(){
double n;
cin>>n;
printf("%.6f\n%.5f\n%e\n%g",n,n,n,n);
return 0;
}

5.T1028 : 字符菱形

给定一个字符,用它构造一个对角线长5 55个字符,倾斜放置的菱形。
【输入】一行, 包含一个字符。
【输出】  该字符构成的菱形。
【输入样例】*
【输出样例】
*




程序:
#include
using namespace std;
int main(){
char ch;
cin>>ch;
cout<<" “< return 0;
}

第六节 顺序结构实例 P39

1.T1029 : 计算浮点数相除的余

计算两个双精度浮点数a和b的相除的余数,a和b都是双精度浮点数。这里余数r的定义是:a=k×b+r,其中k是整数, 0≤r 【输入】一行,包括两个双精度浮点数a和b。
【输出】一行,a÷b的余数。
【输入样例】73.263 0.9973
【输出样例】0.4601
程序:
#include
using namespace std;
int main(){
double a,b;
cin>>a>>b;
int k=(int)(a/b);
double r=a-k*b;
printf("%g",r);
return 0;
}

2.T1030 : 计算球的体积

对于半径为r的球,其体积的计算公式为V=4/3πr3 ,这里取π=3.14 。现给定r,即球半径,类型为double,求球的体积V,保留到小数点后2位。
【输入】  输入为一个不超过100的非负实数,即球半径,类型为double 。
【输出】  输出一个实数,即球的体积,保留到小数点后2位。
【输入样例】4
【输出样例】267.95
程序:
#include
#include
using namespace std;
#define PI 3.14
int main(){
double r;
cin>>r;
double V=pow(r,3)PI4/3; //或者 V=r
rrPI*4/3;
printf("%.2f",V);
return 0;
}

3.T1031 : 反向输出一个三位数

将一个三位数反向输出,例如输入358,反向输出853。
【输入】一个三位数n。
【输出】反向输出n。
程序:
#include
using namespace std;
int main(){
int num;
cin>>num;
cout< return 0;
}

4.T1032 : 大象喝水查

一只大象口渴了,要喝20升水才能解渴,但现在只有一个深h厘米,底面半径为r厘米的小圆桶(h和r都是整数)。问大象至少要喝多少桶水才会解渴。
【输入】一行:包行两个整数,以一个空格分开,分别表示小圆桶的深h 和底面半径r,单位都是厘米。
【输出】一行,包含一个整数,表示大象至少要喝水的桶数。
【输入样例】23 11
【输出样例】3
程序:
#include
#include
using namespace std;
int main(){
double h,r;
cin>>h>>r;
double V=rrM_PI*h;
cout<<(int)ceil(20000/V)< return 0;
}

5.T1033 : 计算线段长度

已知线段的两个端点的坐标A(Xa,Ya),B(Xb,Yb),求线段AB的长度,保留到小数点后3位。
【输入】
  第一行是两个实数Xa,Ya,即A的坐标。
  第二行是两个实数Xb,Yb,即B的坐标。
  输入中所有实数的绝对值均不超过10000。
【输出】  一个实数,即线段AB的长度,保留到小数点后3位。
【输入样例】
1 1
2 2
【输出样例】1.414
#include
#include
using namespace std;
int main(){
double Xa,Ya,Xb,Yb;
cin>>Xa>>Ya>>Xb>>Yb;
printf("%.3f",sqrt((Xb-Xa)(Xb-Xa)+(Yb-Ya)(Yb-Ya)));
return 0;
}

6.T1034 : 计算三角形面积

平面上有一个三角形,它的三个顶点坐标分别为(x1,y1),(x2,y2),(x3,y3) ,那么请问这个三角形的面积是多少,精确到小数点后两位。
【输入】
  输入仅一行,包括6个单精度浮点数,分别对应x1,y1,x2,y2,x3,y3
【输出】  输出也是一行,输出三角形的面积,精确到小数点后两位。
【输入样例】0 0 4 0 0 3
【输出样例】6.00
#include
#include
using namespace std;
double len(double Xa,double Ya,double Xb,double Yb){
return sqrt((Xb-Xa)(Xb-Xa)+(Yb-Ya)(Yb-Ya));
}
int main(){
double X1,Y1, X2,Y2, X3,Y3,l1,l2,l3,q,S;
cin>>X1>>Y1>>X2>>Y2>>X3>>Y3;
l1=len(X1,Y1,X2,Y2);
l2=len(X2,Y2,X3,Y3);
l3=len(X1,Y1,X3,Y3);
q=(l1+l2+l3)/2;
S=sqrt(q*(q-l1)(q-l2)(q-l3));
printf("%.2f",S);
return 0;
}

7.T1036 : A×B问题

输入两个正整数A和B,求A×B的值。注意乘积的范围和数据类型的选择。
【输入】一行,包含两个正整数A和B,中间用单个空格隔开。1≤A,B≤50000 。
【输出】一个整数,即A×B的值。
【输入样例】3 4
【输出样例】12
程序:
#include
using namespace std;
int main(){
unsigned long long a,b;
cin>>a>>b;
cout< return 0;
}

8.T1037 : 计算2的幂

给定非负整数n,求2n 的值,即2的n次方。
【输入】一个整数n。0≤n<31。
【输出】一个整数,即2的n次方。
【输入样例】3
【输出样例】8
程序:
#include
using namespace std;
int main(){
int n;
cin>>n;
cout<<(1< return 0;
}

9.T1038 : 苹果和虫子

你买了一箱n个苹果,很不幸的是买完时箱子里混进了一条虫子。虫子每x 小时能吃掉一个苹果,假设虫子在吃完一个苹果之前不会吃另一个,那么经过y 小时你还有多少个完整的苹果?
【输入】  输入仅一行,包括n,x,y(均为整数)。
【输出】  输出也仅一行,剩下的苹果个数。
【输入样例】10 4 9
【输出样例】7
程序:
#include
#include
using namespace std;
int main(){
int x,y,n;
cin>>n>>x>>y;
int temp=(int)ceil((double)y/x);
if(temp>n)
temp=n;
cout<<(n-temp);
return 0;
}

第三章 程序的控制结构

第二节 if选择结构 P47

1.T1039 : 判断数正负

给定一个整数N,判断其正负。如果N>0,输出positive;如果N=0 ,输出zero;如果N<0,输出negative。
【输入】  一个整数N(−109≤N≤109)。
【输出】
  如果N>0,输出positive;
  如果N=0,输出zero;
  如果N<0,输出negative。
【输入样例】1
【输出样例】positive
程序:
#include
using namespace std;
int main(){
int n;
cin>>n;
if(n>0)
cout<<“positive”;
else if(n==0)
cout<<“zero”;
else
cout<<“negative”;
return 0;
}

2.T1040 : 输出绝对值

输入一个浮点数,输出这个浮点数的绝对值,保留到小数点后两位。
【输入】  输入一个浮点数,其绝对值不超过10000。
【输出】  输出这个浮点数的绝对值,保留到小数点后两位。
【输入样例】-3.14
【输出样例】3.14
程序:
#include
using namespace std;
int main(){
double n;
cin>>n;
if(n>=0)
printf("%.2f",n);
else
printf("%.2f",-1*n);
return 0;
}

3.T1041 : 奇偶数判断

给定一个整数,判断该数是奇数还是偶数。如果n是奇数,输出odd;如果n 是偶数,输出even。
【输入】一个大于零的正整数n。
【输出】输出仅一行,如果n是奇数,输出odd;如果n是偶数,输出even。
【输入样例】5
【输出样例】odd
程序:
#include
using namespace std;
int main(){
int n;
cin>>n;
if(n%2==0)
cout<<“even”;
else
cout<<“odd”;
return 0;
}

4.T1042 : 奇偶ASCII值判断

任意输入一个字符,判断其ASCII是否是奇数,若是,输出YES,否则,输出NO。例如,字符A的ASCII值是65,则输出YES,若输入字符B(ASCII值是66),则输出NO。
【输入】  输入一个字符。
【输出】  如果其ASCII值为奇数,则输出YES,否则,输出NO。
【输入样例】A
【输出样例】YES
程序:
#include
using namespace std;
int main(){
char ch;
cin>>ch;
if(ch%2==0)
cout<<“NO”;
else
cout<<“YES”;
return 0;
}

5.T1043 : 整数大小比较

输入两个整数,比较它们的大小。若x>y,输出>;若x=y,输出=;若x 【输入】一行,包含两个整数x和y,中间用单个空格隔开。0≤x232,−231≤y≤231
【输出】 一个字符。若x>y,输出>;若x=y,输出=;若x 【输入样例】1000 100
【输出样例】>
程序:
#include
using namespace std;
int main(){
int x,y;
cin>>x>>y;
if(x>y)
cout<<">";
else if(x==y)
cout<<"=";
else
cout<<"<";
return 0;
}

6.T1044 : 判断是否为两位数

【题目描述】
  判断一个正整数是否是两位数(即大于等于10且小于等于99)。若该正整数是两位数,输出1,否则输出0。
【输入】  一个正整数,不超过1000。
【输出】  一行。若该正整数是两位数,输出1,否则输出0。
【输入样例】54
【输出样例】1
程序:
#include
using namespace std;
int main(){
int x;
cin>>x;
if((x>9) && (x<100))
cout<<1;
else
cout<<0;
return 0;
}

7.T1045 : 收集瓶盖赢大奖

某饮料公司最近推出了一个“收集瓶盖赢大奖”的活动:如果你拥有10个印有“幸运”、或20个印有“鼓励”的瓶盖,就可以兑换一个神秘大奖。现分别给出你拥有的印有“幸运”和“鼓励”的瓶盖数,判断是否可以去兑换大奖。若可以兑换大奖,输出1,否则输出0。
【输入】  一行,包含两个整数,分别是印有“幸运”和“鼓励”的瓶盖数,用一个空格隔开。
【输出】  一行。若可以兑换大奖,输出1,否则输出0。
【输入样例】11 19
【输出样例】1
程序:
#include
using namespace std;
int main(){
int xy,gl;
cin>>xy>>gl;
if(xy>=10||gl>=20)
cout<<1;
else
cout<<0;
return 0;
}

8.T1046 : 判断一个数能否同时被3和5整除

判断一个数n能否同时被3和5整除,如果能同时被3和5整除输出YES,否则输出NO。
【输入】一行,包含一个整数n。(−1,000,000 【输出】一行,如果能同时被3和5整除输出YES,否则输出NO。
【输入样例】15
【输出样例】YES
程序:
#include
using namespace std;
int main(){
int num;
cin>>num;
if(num%30&&num%50)
cout<<“YES”;
else
cout<<“NO”;
return 0;
}

9.T1047 : 判断能否被3,5,7整除

给定一个整数,判断它能否被3,5,7整除,并输出以下信息:能同时被3,5,7整除(直接输出3 5 7,每个数中间一个空格);只能被其中两个数整除(输出两个数,小的在前,大的在后。例如:35或者37 或者57,中间用空格分隔);只能被其中一个数整除(输出这个除数);不能被任何数整除,输出小写字符n,不包括单引号。
【输入】  输入一行,包括一个整数。
【输出】  输出一行,按照描述要求给出整数被3,5,7整除的情况。
【输入样例】105
【输出样例】3 5 7
程序:
#include
using namespace std;
int main(){
int num;
cin>>num;
if(num%30||num%50||num%70){
if(num%3
0)
cout<<"3 ";
if(num%50)
cout<<"5 ";
if(num%7
0)
cout<<“7”;
}
else
cout<<“n”;
}

10.T1048 : 有一门课不及格的学生

给出一名学生的语文和数学成绩,判断他是否恰好有一门课不及格(成绩小于60分)。若该生恰好有一门课不及格,输出1;否则输出0。
【输入】一行,包含两个在0到100之间的整数,分别是该生的语文成绩和数学成绩。
【输出】若该生恰好有一门课不及格,输出1;否则输出0。
【输入样例】50 80
【输出样例】1
程序:
#include
using namespace std;
int main(){
int ch,ma;
cin>>ch>>ma;
if((ch<60&&ma>=60)||(ch>=60&&ma<60))
printf(“1”);
else
printf(“0”);
return 0;
}

第三节 switch语句 P52

1.T1049 : 晶晶赴约会

晶晶的朋友贝贝约晶晶下周一起去看展览,但晶晶每周的1,3,5有课必须上课,请帮晶晶判断她能否接受贝贝的邀请,如果能输出YES;如果不能则输出NO。注意YES和NO都是大写字母!
【输入】一行,贝贝邀请晶晶去看展览的日期,用数字1到7表示从星期一到星期日。
【输出】一行,如果晶晶可以接受贝贝的邀请,输出YES,否则,输出NO。注意YES和NO都是大写字母!
【输入样例】2
【输出样例】YES
程序:
#include
using namespace std;
int main(){
int d;
cin>>d;
switch(d){
case 1:
case 3:
case 5:
cout<<“NO”;break;
default:
cout<<“YES”;break;
}
return 0;
}

2.T1050 : 骑车与走路

在清华校园里,没有自行车,上课办事会很不方便。但实际上。并非去办任何事情都是骑车快,因为骑车总要找车、开锁、停车、锁车等,这要耽误一些时间。假设找到自行车,开锁并车上自行车的时间为27秒;停车锁车的时间为23 秒;步行每秒行走1.2米,骑车每秒行走3.0米。请判断走不同的距离去办事,是骑车快还是走路快。如果骑车快,输出一行Bike;如果走路快,输出一行Walk;如果一样快,输出一行All。
【输入】一行,包含一个整数,表示一次办事要行走的距离,单位为米。
【输出】一行,如果骑车快,输出一行Bike;如果走路快,输出一行Walk;如果一样快,输出一行All。
【输入样例】120
【输出样例】Bike
程序:
#include
using namespace std;
int main(){
int len;
cin>>len;
if(50+(double)len/3.0>(double)len/1.2)
cout<<“Walk”;
else if(50+(double)len/3.0==(double)len/1.2)
cout<<“All”;
else
cout<<“Bike”;
return 0;
}

3.T1051 : 分段函数

编写程序,计算下列分段函数y=f(x)的值。结果保留到小数点后三位。
y=−x+2.5; (0 ≤x< 5)
y=2−1.5(x−3)(x−3) (5 ≤x< 10)
y=x/2−1.5 (10 ≤x< 20)
【输入】  一个浮点数N(0≤N<20)。
【输出】输出N对应的分段函数值:f(N)。结果保留到小数点后三位。
【输入样例】1.0
【输出样例】1.500
程序:
#include
using namespace std;
int main(){
double x,y;
cin>>x;
if(0<=x&&x<5)
y=-x+2.5;
else if(5<=x&&x<10)
y=2-1.5*(x-3)*(x-3);
else if(10<=x&&x<20)
y=x/2-1.5;
printf("%.3f",y);
return 0;
}

4.T1052 : 计算邮资

根据邮件的重量和用户是否选择加急计算邮费。计算规则:重量在1000 克以内(包括1000克),基本费8元。超过1000克的部分,每500克加收超重费4 元,不足500克部分按500克计算;如果用户选择加急,多收5元。
【输入】一行,包含整数和一个字符,以一个空格分开,分别表示重量(单位为克)和是否加急。如果字符是y,说明选择加急;如果字符是n,说明不加急。
【输出】一行,包含一个整数,表示邮费。
【输入样例】1200 y
【输出样例】17
程序:
#include
#include
using namespace std;
int main(){
int x;
char ch;
cin>>x>>ch;
int sum;
if(x<=1000)
sum=8;
else
sum=8+ceil((double)(x-1000)/500)*4;
if(ch==‘y’) sum+=5;
cout< return 0;
}

5.T1053 : 最大数输出

输入三个整数,数与数之间以一个空格分开。 输出一个整数,即最大的整数。
【输入】  输入为一行,包含三个整数,数与数之间以一个空格分开。
【输出】  输出一行,包含一个整数,即最大的整数。
【输入样例】10 20 56
【输出样例】56
程序:
#include
#include
using namespace std;
int main(){
int num[3];
for(int i=0;i<3;i++)
scanf("%d",num+i);
std::sort(num,num+3);
printf("%d",num[2]);
return 0;
}

6.T1054 : 三角形判断

给定三个正整数,分别表示三条线段的长度,判断这三条线段能否构成一个三角形。如果能构成三角形,则输出yes,否则输出no。
【输入】一行,包含三个正整数,分别表示三条线段的长度,数与数之间以一个空格分开。
【输出】如果能构成三角形,则输出yes,否则输出no。
【输入样例】3 4 5
【输出样例】yes
程序:
#include
using namespace std;
int main(){
float a,b,c;
  cin>>a>>b>>c;
  if(a>0 && b>0 && c>0 && a+b>c && a+c>b && b+c>a)
cout<<“YES”;
else
cout<<“NO”;
return 0;
}

7.T1055 : 判断闰年

判断某年是否是闰年。如果公元a年是闰年输出Y,否则输出N。
【输入】一行,包含一个整数a(0 【输出】一行,如果公元a年是闰年输出Y,否则输出N。
【输入样例】2006
【输出样例】N
程序:
#include
int main(void){
int y;
scanf("%d",&y);
if(y%4000)
printf(“Y”);
else if(y%4
0&&y%100!=0)
printf(“Y”);
else
cout< return 0;
}

8.T1056 : 点和正方形的关系

有一个正方形,四个角的坐标(x,y) 分别是(1,−1),(1,1),(−1,−1),(−1,1),x是横轴,y是纵轴。写一个程序,判断一个给定的点是否在这个正方形内(包括正方形边界)。如果点在正方形内,则输出yes,否则输出no。
【输入】一行,包括两个整数x,y,以一个空格分开,表示坐标(x,y)。
【输出】一行,如果点在正方形内,则输出yes,否则输出no。
【输入样例】1 1
【输出样例】yes
程序:
#include
int main(){
int x,y;
scanf("%d%d",&x,&y);
if(-1<=x&&x<=1&&-1<=y&&y<=1)
printf(“yes”);
else
printf(“no”);
return 0;
}

9.T1057 : 简单计算器

一个最简单的计算器,支持+,−,∗,/四种运算。仅需考虑输入输出为整数的情况,数据和运算结果不会超过int表示的范围。然而:
如果出现除数为0的情况,则输出:Divided by zero!
如果出现无效的操作符(即不为+,−,∗,/之一),则输出:Invalid operator!
【输入】输入只有一行,共有三个参数,其中第1,2个参数为整数,第3个参数为操作符(+,−,∗,/)。
【输出】输出只有一行,一个整数,为运算结果。然而:
如果出现除数为0的情况,则输出:Divided by zero!
如果出现无效的操作符(即不为+,−,∗,/之一),则输出:Invalid operator!
【输入样例】1 2 +
【输出样例】3
程序:
#include
using namespace std;
int main(){
int a,b,result;
char op;
cin>>a>>b>>op;
switch(op){
case ‘+’:
result=a+b;
printf("%d",result);
break;
case ‘-’:
result=a-b;
printf("%d",result);
break;
case '’:
result=a
b;
printf("%d",result);
break;
case ‘/’:
if(b==0){
printf(“Divided by zero!”);
break;
}
result=a/b;
printf("%d",result);
break;
default:
printf(“Invalid operator!”);
break;
}
return 0;
}

10.T1058 : 求一元二次方程

求一元二次方程ax2+bx+c=0的根,其中a不等于0。结果要求精确到小数点后5位。
【输入】一行,包含三个浮点数a,b,c(它们之间以一个空格分开),分别表示方程ax2+bx+c=0的系数。
【输出】输出一行,表示方程的解。
  若两个实根相等,则输出形式为:“x1=x2=…”;
  若两个实根不等,在满足根小者在前的原则,则输出形式为:“x1=…;x2=… ”;
  若无实根输出No answer!。
  所有输出部分要求精确到小数点后5位,数字、符号之间没有空格。
【输入样例】-15.97 19.69 12.02
【输出样例】x1=-0.44781;x2=1.68075
程序:
#include
#include
using namespace std;
#define precision_1 1e-12
#define precision_2 1e-6
int main(){
double a,b,c,x1,x2,delta;
cin>>a>>b>>c;
delta=bb-4ac;
if(delta<0&&fabs(delta)>precision_1)
printf(“No answer!\n”);
else if(fabs(delta) x1=-b/(2
a);
if(fabs(x1) printf(“x1=x2=%.5lf\n”,0);
else
printf(“x1=x2=%.5lf\n”,x1);
}
else{
x1=(-b+sqrt(delta))/(2a);
x2=(-b-sqrt(delta))/(2
a);
if(fabs(x1) if(fabs(x2) if(x1 printf(“x1=%.5lf;x2=%.5lf”,x1,x2);
else
printf(“x1=%.5lf;x2=%.5lf”,x2,x1);
}
return 0;
}

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