信息学奥赛一本通(C++版) 第一部分 C++语言 第三章 程序的控制结构

总目录详见: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该章内容

 

  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
信息学奥赛一本通C》是一本电子书,专为准备参加信息学竞赛的学生而编写的。该书内容丰富,系统性强,对信息学相关知识进行了全面的介绍和解析。它旨在帮助读者全面了解和掌握信息学的基本概念、算法设计和编程技巧。 《信息学奥赛一本通C》的主要特点是: 1.全面的知识点覆盖:该书涵盖了信息学竞赛常见的核心知识点,包括数据结构、算法设计与分析、图论、动态规划等。读者可以系统地学习每个知识点,掌握其原理和应用方法。 2.详细的解题思路:书中为每个知识点的典型题目都提供了详细的解题思路和步骤分析。这些解题思路能够帮助读者理解算法的设计过程,并能够应用到不同的实际问题中。 3.丰富的编程实例:书中配有丰富的编程实例,涵盖了各个知识点的不同应用场景。读者可以通过这些实例来巩固所学的知识,并提升编程能力。 4.易于阅读和学习:该电子书采用清晰简洁的语言,结构也很清晰,方便读者进行阅读和学习。同时,配有大量图表和示意图,便于理解和记忆。 总之,《信息学奥赛一本通C》是一本理论与实践相结合的电子书,适合参加信息学竞赛的学生使用。它不仅提供了全面的理论知识,还提供了实际问题的解决思路和实例,帮助读者系统地学习和掌握信息学竞赛所需的基本知识和技巧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值