总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716
信息学奥赛一本通(C++版) 第一部分 C++语言 第三章 程序的控制结构
http://ybt.ssoier.cn:8088/
第一节 if选择结构
//1039 判断数正负
#include <stdio.h>
int main(){
int a;
scanf("%d",&a);
if(a>0)printf("positive");
else if(a==0)printf("zero");
else if(a<0)printf("negative");
return 0;
}
//1040 输出绝对值
#include <stdio.h>
int main(){
double f;
scanf("%lf",&f);
if(f<0)f=-f;
printf("%.2lf",f);
return 0;
}
//1041 奇偶数判断
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
if(n%2==1)printf("odd");
else printf("even");
return 0;
}
//1042 奇偶ASCII值判断
#include <stdio.h>
int main(){
char c;
scanf("%c",&c);
if(c%2==1)printf("YES");
else printf("NO");
return 0;
}
//1043 整数大小比较
#include <stdio.h>
int main(){
int x,y;
scanf("%d%d",&x,&y);
if(x==y)printf("=");
else if(x>y)printf(">");
else printf("<");
return 0;
}
//1044 判断是否为两位数
#include <stdio.h>
int main(){
int a;
scanf("%d",&a);
if(a/100==0&&a/10!=0)printf("1");
else printf("0");
}
//1045 收集瓶盖赢大奖
#include <stdio.h>
int main(){
int a,b;
scanf("%d%d",&a,&b);
if(a>=10||b>=20)printf("1");
else printf("0");
return 0;
}
//1046 判断一个数能否同时被3和5整除
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
if(n%3==0&&n%5==0)printf("YES");
else printf("NO");
return 0;
}
//1047 判断能否被3,5,7整除
#include <stdio.h>
int main(){
int a;
scanf("%d",&a);
if(a%3==0&&a%5==0&&a%7==0)printf("3 5 7");
else if(a%3==0&&a%5==0)printf("3 5");
else if(a%3==0&&a%7==0)printf("3 7");
else if(a%5==0&&a%7==0)printf("5 7");
else if(a%3==0)printf("3");
else if(a%5==0)printf("5");
else if(a%7==0)printf("7");
else printf("n");
return 0;
}
//1048 有一门课不及格的学生
//提交,未通过,不敢相信,重新读题,发现是只有一门功课不及格
//修改,提交,AC
#include <stdio.h>
int main(){
int a,b;
scanf("%d%d",&a,&b);
if((a<60&&b>=60)||(a>=60&&b<60))printf("1");
else printf("0");
return 0;
}
2017-10-20 20:22 AC该节内容
第二节 switch语句
//1049 晶晶赴约会
#include <stdio.h>
int main(){
int a;
scanf("%d",&a);
if(a==2||a==4||a==6||a==7)printf("YES");
else printf("NO");
return 0;
}
//1050 骑车与走路
#include <stdio.h>
int main(){
int a,t1,t2;
scanf("%d",&a);
t1=27+23+a/3.0;
t2=a/1.2;
if(t1==t2)printf("All");
else if(t1<t2)printf("Bike");
else if(t1>t2)printf("Walk");
return 0;
}
//1051 分段函数
#include <stdio.h>
int main(){
double x,y;
scanf("%lf",&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("%.3lf",y);
return 0;
}
//1052 计算邮资
#include <stdio.h>
int main(){
int a,sum=0;
char s[2];
scanf("%d%s",&a,s);
if(a<=1000)sum+=8;
else if(a>1000){
sum+=8;
a-=1000;
sum+=a/500*4;
if(a%500!=0)
sum+=4;
}
if(s[0]=='y')sum+=5;
printf("%d",sum);
}
//1053 最大数输出
#include <stdio.h>
int main(){
int a,max;
scanf("%d",&a);
max=a;
scanf("%d",&a);
if(a>max)max=a;
scanf("%d",&a);
if(a>max)max=a;
printf("%d",max);
return 0;
}
//1054 三角形判断
#include <stdio.h>
int main(){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a)printf("yes");
else printf("no");
return 0;
}
//1055 判断闰年
#include <stdio.h>
int main(){
int y;
scanf("%d",&y);
if(y%100==0)
if(y%400==0)printf("Y");
else printf("N");
else if(y%4==0)printf("Y");
else printf("N");
return 0;
}
//1056 点和正方形的关系
#include <stdio.h>
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;
}
//1057 简单计算器
//提交,未通过,仔细一看,抄错字符串了,修改,提交AC
#include <stdio.h>
int main(){
int a,b;
char s[2];
scanf("%d%d%s",&a,&b,s);
if(s[0]=='+')printf("%d",a+b);
else if(s[0]=='-')printf("%d",a-b);
else if(s[0]=='*')printf("%d",a*b);
else if(s[0]=='/'){
if(b==0)printf("Divided by zero!");//此处写成 if(b==0)printf("Invalid operator!");
else printf("%d",a/b);
}else printf("Invalid operator!");
return 0;
}
//1058 求一元二次方程
//该题编写下来,问题比较多,
//正好本日有空,重新编写
//样例通过,提交AC 2018-4-1 8:19
#include <stdio.h>
#include <math.h>
#define eps 1e-8
int main(){
double a,b,c,x1,x2,delta,t;
scanf("%lf%lf%lf",&a,&b,&c);//此处写成 scanf("%d%d%d",&a,&b,&c); 低级错误
delta=b*b-4*a*c;
if(fabs(delta)<=eps)printf("x1=x2=%.5lf",-b/2/a);//delta==0 只有一个解
else if(delta<=-eps)printf("No answer!");//delta<0 无解
else{//delta>0有两解
delta=fabs(delta);
x1=(-b-sqrt(delta))/2/a,x2=(-b+sqrt(delta))/2/a;
if(x1>x2)t=x1,x1=x2,x2=t;//注意打印,先小,后大
printf("x1=%.5lf;x2=%.5lf",x1,x2);
}
return 0;
}
//1058 求一元二次方程
//提交,未通过,仔细读题,发现a不等于0,故分母没问题,考虑,可能存在根号里的数小于0的情况
//修改,提交,发现错得更多了,读题,发现“若两个实根不等,在满足小者在前的原则”,修改,提交,未通过
//继续修改,提交,错得更多了,
//提供一组测试样例
//输入:
//-5 2 -0.2
//输出:
//0.20000
//因浮点数计算有误差,故要采用比较的方式才能确定是否是0
//再提供一组测试数据:
//输入:
//-3 2 0
//输出:
//0.00000 0.66667
//该题很大的难点,体现在浮点数计算存在误差
//有了以上两个样例,程序修改,提交AC。该题整整调了1个小时。2017-10-20 23:28
#include <stdio.h>
#include <math.h>
#define eps1 1e-10
#define eps2 1e-6
int main(){
double a,b,c,x1,x2,g;//g2表示g的绝对值
scanf("%lf%lf%lf",&a,&b,&c);
g=b*b-4*a*c;
if(g<0&&fabs(g)>eps1)printf("No answer!");
else if(fabs(g)<eps1){
x1=-b/(2*a);
if(fabs(x1)<eps2)//判断是否是0
printf("x1=x2=%.5lf",0);
else
printf("x1=x2=%.5lf",x1);
}
else{
x1=(-b+sqrt(g))/(2*a);
x2=(-b-sqrt(g))/(2*a);
if(fabs(x1)<eps2)x1=fabs(x1);
if(fabs(x2)<eps2)x2=fabs(x2);
if(x1<x2)printf("x1=%.5lf;x2=%.5lf",x1,x2);
else printf("x1=%.5lf;x2=%.5lf",x2,x1);//此处写成 printf("x2=%.5lf;x1=%.5lf",x2,x1);//此处写成 printf("x1=%.5lf;x2=%.5lf",x2,x1);
}
return 0;
}
2017-10-20 23:28 AC该节内容
2017-10-20 23:28 AC该章内容