依旧水题警告,不多BB,直接上。
题目0:数的性质
实际上就是简单的与(&),或(|)以及条件复合的基本用法。
scanf("%d", &x);
bool a = !(x & 1), b = (x > 4 && x <= 12); //a表示题目性质1,b表示题目性质2
printf("%d %d %d %d", a & b, a | b, (a && !b || b && !a), !a && !b);
题目1:闰年判断
实际上注意整百年的情况,整百年的情况下必须是400的倍数才可以。原因自行百度嗷。
printf("%d\n",(n%4==0&&n%100!=0)||(n%400==0));
题目2:Apples
简单的输入输出,只要你具备基本的英语知识(apple的复数形式为apples)
if(n<=1) return 0*printf("Today, I ate %d apple.",n);
else return 0*printf("Today, I ate %d apples.",n);
题目3:洛谷团队系统
设题目为n,则本地配置需要5n,而上传则为3n+11,令5n>3n+11有n>5.5,因此直接判断
if((n*1.0)>5.5) return 0*printf("Luogu\n");
else return 0*printf("Local\n");
题目4:肥胖问题
即BMI的计算方法- -,顺带一提,疫情过后各位的BMI怎么样了鸭(滑稽),另外由于题目要求有效数字,所以最好是采用cout输出。
double m, h, bmi;
cin >> m >> h;
bmi = m / (h * h);
if (bmi < 18.5) cout << "Underweight" << endl;
if (bmi >= 18.5 && bmi < 24)
cout << "Normal";
if (bmi >= 24)
cout << bmi << endl << "Overweight" << endl;
题目5:三位数排序
这里我用的std::sort,没啥技术含量,直接略过。
题目6:月份天数
运用的打表的方法,对于大部分人来说都是基操。
int M[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; //提前打个表
int main(){
int year,month;
scanf("%d%d",&year,&month);
if((year%4==0&&year%100!=0)||year%400==0) M[2]=29;
return 0*printf("%d\n",M[month]);
}
题目7:不高兴的津津
直接边读边比较就行了,这道题过水。
for (i=0;i<7;i++){
scanf("%d%d",&a,&b);
s=a+b;
if ((s>max)&&(s>8)) max=s,day=i
}
printf("%d",day);
题目8:买铅笔
表示这道题是我早期做的一道题了,题解看看就完事。
#include<stdio.h>
int main(){
int n, n1, p1, n2, p2, n3, p3, a1, a2, a3, fir=0, sec=0, thi=0;
scanf("%d%d%d%d%d%d%d", &n,& n1,&p1, &n2, &p2,& n3,& p3);//早期写法这样太蠢了,不适合拓展
a1 = ((n - 1 + n1) / n1)*p1, a2 = ((n - 1 + n2) / n2)*p2, a3 = ((n - 1 + n3) / n3)*p3;
if (a1 > a2) {
if (a1 > a3){
fir = a1;
if (a2 > a3) sec = a2,thi = a3;
else sec = a3,thi = a2;
}
else fir = a3,sec = a1,thi = a2;
}
else {
if (a2 > a3){
fir = a2;
if (a1 > a3) sec = a1,thi = a3;
else sec = a3,thi = a1;
}
else fir = a3,sec = a2, thi = a1;
}
return 0*printf("%d", thi);
}
题目9:ISBN
比较暴力的方法,详见代码。
#include<stdio.h>
char a[11];
int main(){
char t1, t2;
int check=0;
scanf("%c-%c%c%c-%c%c%c%c%c-%c",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8],&t1);
for(int i=0;i<9;i++) check+= (i+1)*(a[i]-'0');//题解一里面有相关的解释
t2=check%11+'0';
if(t2=='0'+10) t2='X';
if(t1==t2) printf("Right");
else printf("%c-%c%c%c-%c%c%c%c%c-%c",a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],t2);
return 0;
}
题目10:电费
就是简单粗暴的分段函数desu。
if(d<=150) y=0.4463*d;
else if(d>150&&d<=400) y=0.4463*150+0.4663*(d-150);
else y=0.4463*150+0.4663*250+(d-400)*0.5663;
printf("%.1lf",y);//一位小数
题目11:小鱼的航程
具体的变量含义见注释。
int x, b, c, d;
long int n, a;
scanf("%d%ld", &x, &n);
b = n / 7; //计算要多少个整周
a = b * 250 * 5;//a表示的是答案,整周直接提前计算
c = n - 7 * b;//还剩下了几天
d = x;//从周几开始天开始
while (c){
if (d == 7) d = 1;//加入这周是周天,那么我们直接让他下一天变为周一
else if (d <= 5) d++, a = a + 250;//工作日,给我游
else d++;//表示周六的时候,不游
c--;//剩余日期减1
}
return 0*printf("%ld", a);
题目12 :三角函数
由于是勾股数,故两个角都是锐角,正弦函数在(0,pi/2)的范围内随角度增加而增加,故较小锐角的正弦值为最小值/最大值,因此难点变为了约分,这里通过gcd来求解。
int a[4];
for (int i=0;i<3;i++) cin>>a[i];
sort(a,a+3);
cout<<a[0]/__gcd(a[0],a[2])<<'/'<<a[2]/__gcd(a[0],a[2]);
return 0;
题目13:淘淘摘苹果
提前存好遍历一遍就行了,主要是因为高度在最后才输入,因此不能边输入边cnt++。
int a[10],int heigh,can,count=0;
for(int i=0;i<10;i++) scanf("%d", &a[i]);
scanf("%d", &heigh);
can = heigh + 30;
for (int i = 0; i < 10; i++) if (a[i] <= can) count++;
return 0*printf("%d", count);
题目14:三角形分类
直接就是三角形判断。
scanf("%d%d%d", &a, &b, &c);
int d[4] = {0, a, b, c};//直接放在scanf输入也可以的,这里是懒= =
sort(d + 1, d + 4);
if(d[1] + d[2] <= d[3]) return 0*printf("Not triangle\n");
if(d[1] * d[1] + d[2] * d[2] == d[3] * d[3]) printf("Right triangle\n");
else if(d[1] * d[1] + d[2] * d[2] > d[3] * d[3]) printf("Acute triangle\n");
else if(d[1] * d[1] + d[2] * d[2] < d[3] * d[3]) printf("Obtuse triangle\n");
if(a == b || b == c || a == c) printf("Isosceles triangle\n");
if(a == b && b == c) printf("Equilateral triangle\n");
return 0;
题目15:ABC
按照规定的顺序输出三个数字,具体代码见下。
int a[3];
char A,B,C;
cin>>a[0]>>a[1]>>a[2];
cin>>A>>B>>C;
sort(a,a+3);
cout<<a[A-'A']<<" "<<a[B-'A']<<" "<<a[C-'A'];//通过求差来保证ABC的输出顺序
return 0;
水题基本上没了,后面的题开始会有一点点难度了,欢乐水题就此结束。