算法学习-洛谷基础题

三角形面积

关键:海伦公式

#include <stdio.h>
#include <math.h>

double cacu(double a,double b,double c){
    double p=0;
    p=0.5*(a+b+c);
    return (sqrt(p*(p-a)*(p-b)*(p-c)));
}
int main(void){
    double a=0,b=0,c=0,S=0;
    scanf("%lf %lf %lf",&a,&b,&c);
    S=cacu(a,b,c);
    printf("%.1lf",S);
    return 0;
}

// gcc 三角形面积.c -lm -o 三角形面积

对角线

两条对角线其实确定了四个点(可以这么理解)

四个顶点构成一个四边形

所以每个顶点由一个四边形造成

#include <stdio.h>
int main(void){
    unsigned long long a=0,b=0;
    scanf("%lld",&a);
    b=a*(a-1)/2*(a-2)/3*(a-3)/4;
    printf("%lld",b);
    return 0;
}

小技巧 b=a*(a-1)*(a-2)*(a-3)/24; 改成 b=a*(a-1)/2*(a-2)/3*(a-3)/4;

数的性质

一些数字可能拥有以下的性质:

性质 1:是偶数;
性质 2:大于 4 且不大于 12。
小A 喜欢这两个性质同时成立的数字;Uim 喜欢这至少符合其中一种性质的数字;八尾勇喜欢刚好有符合其中一个性质的数字;正妹喜欢不符合这两个性质的数字。

#include <stdio.h>
#include <math.h>

int judge(int num){
    if(num%2==0){
        if(num>4&&num<=12){
            return 4;
        }
        return 3;
    }
    else if(num>4&&num<=12){
        return 3;
    }
    return 2;
}

int main(void){
    int a=0,choice;
    scanf("%d",&a);
    choice=judge(a);
    switch(choice){
        case 4:printf("1 1 0 0"); break;
        case 3:printf("0 1 1 0"); break;
        default:
            printf("0 0 0 1");
    }
    return 0;
}

闰年判断
输入一个年份(大于 1582 的整数 ),判断这一年是否是闰年,如果是输出 1,否则输出 0。

#include <stdio.h>
#include <math.h>

int judge(int num){
    if(num%4==0){
        if(num%400==0) return 1;
    }
    else if(num%100==0) return 0;
    else return 1;
    return 0;
}

int main(void){
    int a=0,choice;
    scanf("%d",&a);
    choice=judge(a);
    printf("%d",choice);
    return 0;
}

洛谷团队系统

#include <stdio.h>
int main(void){
    int a=0,local,luogu;
    scanf("%d",&a);
    local=a*5;
    luogu=11+3*a;
    if(local<=luogu) printf("Local");
    else printf("Luogu");
    return 0;
}

肥胖问题

#include <stdio.h>

int main(void){
    double m,h,BMI;
    scanf("%lf %lf",&m,&h);
    BMI=m/(h*h);
    if(BMI<18.5) printf("Underweight");
    else if(BMI>=18.5&&BMI<24) printf("Normal");
    else{
        printf("%.6g\n",BMI);
        printf("Overweight");
    }
    return 0;
}

三位数排序
给出三个整数 a,b,c(0<=a,b,c<=100)a,b,c(0≤a,b,c≤100),要求把这三位整数从小到大排序。

#include <stdio.h>

int main(void){
    int m,h,n;
    scanf("%d %d %d",&m,&h,&n);
    if (m>=h&&m>=n&&h>=n){
        printf("%d %d %d",n,h,m);
    }
    else if (m>=h&&m>=n&&n>=h){
        printf("%d %d %d",h,n,m);
    }
    else if (h>=m&&m>=n&&h>=n){
        printf("%d %d %d",n,m,h);
    }
    else if (n>=m&&m>h&&n>=h){
        printf("%d %d %d",h,m,n);
    }
    else if (h>=m&&n>m&&n>=h){
        printf("%d %d %d",m,h,n);
    }
    else{
        printf("%d %d %d",m,n,h);
    }
    return 0;
}

月份天数
输入年份和月份,输出这一年的这一月有多少天。需要考虑闰年

#include <stdio.h>

int judge(int a){
    if(a==1||a==3||a==5||a==7||a==8|a==10||a==12) printf("31");
    else printf("30");
}

int judge_run(int num){
    if(num%4==0){
        if(num%400==0) return 1;
        else if(num%100==0) return 0;
        return 1;
    }
    return 0;
}

int main(){
    int year,month,day;
    scanf("%d %d",&year,&month);
    if(month==2){
        if(judge_run(year)){
            printf("29");
        }
        else printf("28");
        return 0;
    }
    judge(month);
    return 0;
}

ISBN号码
每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如x-xxx-xxxxx-x,其中符号-就是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符-之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔符后的五位数字代表该书在该出版社的编号;最后一位为识别码。

识别码的计算方法如下:

首位数字乘以11加上次位数字乘以22……以此类推,用所得的结果mod11,所得的余数即为识别码,如果余数为10,则识别码为大写字母XX。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,…,9再求和,即0×1+6×2+……+2×9=158然后取158mod11的结果4作为识别码。

你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出Right;如果错误,则输出你认为是正确的ISBN号码。

字符串转数字
需要库函数#include<stdlib.h>

● atof():将字符串转换为双精度浮点型值。
● atoi():将字符串转换为整型值。
● atol():将字符串转换为长整型值。
● strtod():将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字。
● strtol():将字符串转换为长整值,并报告不能被转换的所有剩余数字。
● strtoul():将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字。

数字转字符串
● itoa():将整型值转换为字符串。
● ltoa():将长整型值转换为字符串。
● ultoa():将无符号长整型值转换为字符串。
● gcvt():将浮点型数转换为字符串,取四舍五入。
● ecvt():将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点。
● fcvt():指定位数为转换精度,其余同ecvt()。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void){
    char s[100];
    int num[100];
    int all=0;
    int len;
    scanf("%s",&s);
    len=strlen(s);
    for(int i=0;i<len;i++){
        if(s[i]=='-')
            for(int j=0;j<len-i;j++){
                s[i+j]=s[i+j+1];
            }
    }
    len=strlen(s);
    for(int i=0;i<len;i++){
        if(s[i]=='X'){
            num[i]=10;
            continue;
        }
        char m=s[i];
        num[i]=atoi(&m);
    }
    for(int i=0;i<len-1;i++){
        all+=(i+1)*num[i];
    }
    if(all%11==num[len-1])
        printf("right");
    else{
        for(int i=0;i<len-1;i++){
            printf("%d",num[i]);
            if(i==0||i==3||i==8){
                printf("-");
            }
        }
        if(all%11==10){
            printf("X");
        }
        else{
            printf("%d",all%11);
        }
    }
    return 0;
}

小鱼的航程

#include <stdio.h>
int main()
{
  long int a1,b1,c;
  int a2,b2;
  scanf("%d",&a2);
  scanf("%ld",&a1);
  b1=a1/7;
  b2=a1%7;
  c=b1*250*5;
  if((b2+a2)==6)
  {
  	c=c+(b2-1)*250;
  	printf("%ld",c+250);
  }
  else if((b2+a2)>6)
  {
  	c=c+(b2-2)*250;
  	printf("%ld",c+250);
  }
  else if(b1==0&&(((b2-1)+a2)>=6)&&((b2-1)+a2)<=7)
  {printf("%ld",c+250);}
  else{
  	c=c+(b2)*250;
  	printf("%ld",c);
  }
  return 0;
}

三角形分类

#include <stdio.h>
#include <math.h>
int a,b,c,a1,b1,c1;
void sorting(){
    if(a>=b&&a>=c){
        a1=a;
        if(b>=c){
            b1=b;
            c1=c;
        }
        else{
            b1=c;
            c1=b;
        }
    }
    if(c>=b&&c>=a){
        a1=c;
        if(b>=a){
            b1=b;
            c1=b;
        }
        else{
            b1=a;
            c1=a;
        }
    }
}
int main(){
    scanf("%d %d %d",&a,&b,&c);
    sorting(a,b,c,a1,b1,c1);
    if(c1+b1<a1||c1==0){
        printf("Not triangle");
    }
    else{
        if((c1*c1+b1*b1)==a1*a1){
            printf("Right triangle\n");
        }
        else if((c1*c1+b1*b1)<a1*a1){
            printf("Obtuse triangle\n");
        }
        else{
            printf("Acute triangle\n");
        }
        if(c1==b1||b1==a1){
            printf("Isosceles triangle\n");
        }
        if(c1==b1&&b1==a1){
            printf("Equ;ateral triangle\n");
        }
    }
    return 0;
}

ABC

#include <stdio.h>
#include <math.h>
int a,b,c,a1,b1,c1;
void sorting(){
    if(a>=b&&a>=c){
        a1=a;
        if(b>=c){
            b1=b;
            c1=c;
        } else{
            b1=c;
            c1=b;
        }
    }
    if(b>=a&&b>=c){
        a1=b;
        if(a>=c){
            b1=a;
            c1=c;
        } else{
            b1=c;
            c1=a;
        }
    }
    if(c>=b&&c>=a){
        a1=c;
        if(b>=a){
            b1=b;
            c1=a;
        } else{
            b1=a;
            c1=b;
        }
    }
}
int main(void){
char n,m,l;
    scanf("%d %d %d",&a,&b,&c);
    scanf("%c %c %c",&m,&n,&l);
    sorting();
   // printf("%c-%c-%c-",m,n,l);
    //printf("%d %d %d",a1,b1,c1);
    if(m=='A'){
        printf("%d ",c1);
    } else if(m=='B'){
        printf("%d ",b1);
    } else{
        printf("%d ",a1);
    }

    if(n=='A'){
        printf("%d ",c1);
    } else if(n=='B'){
        printf("%d ",b1);
    } else{
        printf("%d ",a1);
    }

    if(l=='A'){
        printf("%d ",c1);
    } else if(l=='B'){
        printf("%d ",b1);
    } else{
        printf("%d ",a1);
    }
    return 0;
}

算法学习-洛谷基础题
https://zer0ptr.github.io/2025/07/13/算法学习-洛谷基础题/
Author
zer0ptr
Posted on
July 13, 2025
Licensed under