算法学习-洛谷基础题
三角形面积
关键:海伦公式
#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;
}