本次练习2题解更新有点慢了,望见谅~
注:本次练习或许有一些新的知识在里面,本篇不会全部概括,对于提及到的知识点可以百度查阅更加详细的博客学习
题目大意
编写一个程序,读取三个整数,并按升序打印它们。
题解
需要用到排序算法,C语言版本给的是最基本的冒泡排序算法的模板 ,作为初学者来说必须要掌握
C++版本给的是比赛常用最快的sort排序 可以嵌套结构体,函数等等,默认是从小到大排序,如果要从大到小或者自定义排序 则需要嵌入函数
另外,输入采用多组输入格式,一般情况下都可以用多组输入,多组输入一般不会错! 除非题目严格要求用单组输入
C语言版本
#include
#define N 3 //代表三个数
int a[5];
int main(){
while(scanf("%d %d %d",&a[0],&a[1],&a[2])!=EOF){
//冒泡排序模板
for(int i=0;i<N-1;i++){
for(int j=0;j<N-1-i;j++){
if(a[j]>a[j+1]){
int tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
}
for(int i=0;i<2;i++)
printf("%d ",a[i]);
printf("%d\n",a[2]);
}
return 0;
}
C++版本
#include
using namespace std;
int a[5];
int main(){
while(cin>>a[0]>>a[1]>>a[2]){
sort(a,a+3);
cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl;
}
return 0;
}
题目大意
编写一个程序,读取一个矩形和一个圆,并确定圆是否排列在矩形内。如下图所示,给出了矩形的右上角坐标(W,H)和圆心坐标(x,y)以及圆的半径r
题解
水平方向判断 x - r 和 x + r 是否在矩形范围内 垂直方向判断 y - r 和 y + r 是否在矩形范围内
C语言版本
#include
int main()
{
int W, H, x, y, r;
scanf("%d %d %d %d %d", &W, &H, &x, &y, &r);
if (x - r >= 0 && x + r <= W && y - r >= 0 && y + r <= H)
printf("Yes\n");
else
printf("No\n");
return 0;
}
C++版本
#include
using namespace std;
int main()
{
int W, H, x, y, r;
cin>>W>>H>>x>>y>>r;
if (x - r >= 0 && x + r <= W && y - r >= 0 && y + r <= H)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
return 0;
}
题目大意
在在线裁判系统中,裁判文件可以包含多个数据集,以检查提交的程序是否为每个测试用例输出正确的答案。这个任务是练习解决一个问题与多个数据集。编写一个程序,读取一个整数x并按原样打印出来。注意,针对这个问题给出了多个数据集。
题解
这个题就是一个典型的多组输入类型,在A题已经介绍了C语言的EOF,这里直接拿来用,然后对于输出结果的格式,我们可以把结果复制一份 然后把需要输出的数据改成我们的变量即可 这样可以降低格式错误的可能性
C语言版本
#include
int main(){
int x=0,k=0;
while(scanf("%d",&x)!=EOF&&x){
printf("Case %d: %d\n",++k,x);
}
return 0;
}
C++版本
#include
using namespace std;
int main(){
int x=0,k=0;
while(cin>>x&&x){
cout<<"Case "<<++k<<": "<<x<<endl;
}
return 0;
}
题目大意
编写一个程序,读取两个整数x和y,并按升序打印它们。
题解
对于x > y 输入x y 那么我们直接输出y x 就相当于交换了x和y
C语言版本
#include
int main(){
int x,y;
while(scanf("%d %d",&x,&y)!=EOF&&(x+y)){
if(x>y)
printf("%d %d\n",y,x);
else
printf("%d %d\n",x,y);
}
return 0;
}
C++版本
#include
using namespace std;
int main(){
int x,y;
while(cin>>x>>y&&(x+y)){
if(x>y)
cout<<y<<" "<<x<<endl;
else
cout<<x<<" "<<y<<endl;
}
return 0;
}
题目大意
编写一个程序,读取三个整数a、b和c,并打印出c在a和b之间的除数
题解
用循环遍历 a 到 b 然后判断c对a-b范围内的数是否能取余 如果可以,那么就计数器加1
C语言版本
#include
int main(){
int a,b,c;
while(scanf("%d %d %d",&a,&b,&c)!=EOF){
int cnt=0;
for(int i=a;i<=b;i++){
if(c%i==0)
++cnt;
}
printf("%d\n",cnt);
}
return 0;
}
C++版本
#include
using namespace std;
int main(){
int a,b,c;
while(cin>>a>>b>>c){
int cnt=0;
for(int i=a;i<=b;i++){
if(c%i==0)
++cnt;
}
cout<<cnt<<endl;
}
return 0;
}
题目大意
编写一个程序,读取两个整数a和b,并计算以下值:
a÷b:d(整数)
a÷b的余数:r(整数)
a÷b:f(实数)
题解
整数和余数直接计算即可 对于实数,可以采用如下方式进行int到double的转化 对于输出保留5位数 一般用C的printf比较方便 所以就没有C++版本了
C语言版本
#include
int main(){
int a,b;
while(scanf("%d %d",&a,&b)!=EOF){
printf("%d %d ",a/b,a%b);
double s=a*1.0/b;
printf("%.5f\n",s);
}
return 0;
}
学如逆水行舟,不进则退