算法竞赛入门经典学习笔记(一)——程序设计入门

  • π的值:const double pi = acos(-1.0);
  • 保留3位小数:%.3f
#include<stdio.h>
#include<math.h>
int main() {
    double a = 111111111;       // 91
    printf("%f\n", a*a);        // 12345678987654320.000000
    printf("%f\n",sqrt(-10));   // -1.#IND00
    printf("%f\n",1.0/0.0);     // 1.#INF00
    printf("%f\n",0.0/0.0);     // -1.#IND00
    //printf("%d\n",1/0);         // 系统报错
    printf("\\n\n");              // 输出/n
    return 0;
}

习题1-1 平均数(average)

输入3个整数,输出它们的平均值,保留3位小数。

#include<stdio.h>
int main() {
    int a, b, c;
    scanf("%d%d%d",&a,&b,&c);
    int sum = a + b + c;
    printf("%.3f\n", sum/3.0);
}

习题1-2 温度(temperature)

输入华氏温度f,输出对应的摄氏温度c,保留3位小数。提示:c=5(f-32)/9。

#include<stdio.h>
int main() {
    float f;
    scanf("%f",&f);
    float result = 5*(f-32)/9;
    printf("%.3f\n", result);
}

习题1-3 连续和(sum)

输入正整数n,输出1+2+…+n的值。提示:目标是解决问题,而不是练习编程。

#include<stdio.h>
#include<math.h>
int main() {
    int n;
    scanf("%d",&n);
    printf("%d\n",n*(n+1)/2);

    return 0;
}

习题1-4 正弦和余弦(sin和cos)

输入正整数n(n<360),输出n度的正弦、余弦函数值。提示:使用数学函数。

#include<stdio.h>
#include<math.h>
int main() {
    int n;
    scanf("%d",&n);
    double sinN = sin(n);
    double cosN = cos(n);
    printf("%f\n",sinN);
    printf("%f\n",cosN);

    return 0;
}

习题1-5 打折 (discount)

一件衣服95元,若消费满300元,可打八五折。输入购买衣服件数,输出需要支付的金
额(单位:元),保留两位小数。

#include<stdio.h>
#include<math.h>
int main() {
    int n;
    scanf("%d",&n);
    int unitPrice = 95;
    float total = unitPrice * n;
    if(total >= 300) {
        printf("%.2f\n", total*0.85);
    } else {
        printf("%.2f\n", total);
    }

    return 0;
}

习题1-6 三角形(triangle)

输入三角形3条边的长度值(均为正整数),判断是否能为直角三角形的3个边长。如果
可以,则输出yes,如果不能,则输出no。如果根本无法构成三角形,则输出not a triangle。

#include<stdio.h>
#include<math.h>
int main() {
    int a, b, c;
    scanf("%d %d %d",&a,&b,&c);
    int temp;
    if(a > c) {
        temp = a;
        a = c;
        c = temp;
    }
    if(b > c) {
        temp = b;
        b = c;
        c = temp;
    }
    if(a + b > c) {
        if(a*a + b*b == c*c) {
            printf("yes\n");
        }
        else {
            printf("no\n");
        }
    } else {
        printf("not a triangle\n");
    }

    return 0;
}

习题1-7 年份(year)

输入年份,判断是否为闰年。如果是,则输出yes,否则输出no。

#include<stdio.h>
#include<math.h>
int main() {
    int year;
    scanf("%d",&year);
    if(year % 400 == 0 || (year % 100 !=0 && year % 4 ==0)) {
        printf("yes");
    } else {
        printf("no");
    }
    return 0;
}

int型整数的最小值和最大值是多少(需要精确值)

c标准里面只定义了int的最小宽度,所以这个范围就完全依赖于编译器的实现。比如说在win32下,int的范围是 -2^31 ~ 2^31 - 1。也就是:[ -2147483648, 2147483647]。
C99规定了一些固定长度的整数,例如int32_t、uint32_t 。
好在算法竞赛的平台相对稳定,目前几乎在所有的比赛平台上,int都是32位整数。

#include<stdio.h>
#include<limits.h>
int main() {
    printf("int最小值: %d\n", INT_MAX);
    printf("int最大值: %d\n", INT_MIN);
    return 0;
}

double型浮点数能精确到多少位小数?或者,这个问题本身值得商榷

#include<stdio.h>
int main() {
    printf("%.20lf",1.0/3.0); // 0.33333333333333331000
    return 0;
}

double型浮点数最大正数值和最小正数值分别是多少(不必特别精确)

DBL_MAX = 1.79769e+308
DBL_MIN = 2.22507e-308

逻辑运算符号“&&”、“||”和“!”(表示逻辑非)的相对优先级是怎样的?也就是说,a&&b||c应理解成(a&&b)||c还是a&&(b||c),或者随便怎么理解都可以

#include <stdio.h>
int main(){
    int a = 0, b = 1, c = 1;
    printf("%d",a&&b||c); // 1,先算与
}

#include <stdio.h>
int main(){
    int a = 0, b = 0;
    printf("%d",!a&&b); // 先算!
}

if(a)if(b)x++;else y++的确切含义是什么?这个else应和哪个if配套?有没有办法明确表达出配套方法

#include<stdio.h>
#include<math.h>
int main() {
    int a=1;
    int b=0;
    int x=0;
    int y=0;
    if(a){
        if(b) {
            x++;
        }
        else{
            y++;
        }
    }
    printf("%d %d\n",x,y);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/u011741311/article/details/80706877