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

信息学奥赛一本通(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该章内容


阅读更多
换一批

没有更多推荐了,返回首页