(1)P5710 【深基3.例2】数的性质
定义两个布尔型的变量来记录这两个性质是否满足,true代表满足,false代表满足。然后对4个人根据他们的要求输出1或者0即可。代码比较长,但都是一些复制粘贴的活。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
boolean flag1=false,flag2=false;
if(n%2==0) {
flag1=true;
}
if(n>4&&n<=12) {
flag2=true;
}
if(flag1&&flag2) {
System.out.print(1+" ");
}
else {
System.out.print(0+" ");
}
if(flag1||flag2) {
System.out.print(1+" ");
}
else {
System.out.print(0+" ");
}
if(flag1&&!flag2||!flag1&&flag2) {
System.out.print(1+" ");
}
else {
System.out.print(0+" ");
}
if(!flag1&&!flag2) {
System.out.print(1+" ");
}
else {
System.out.print(0+" ");
}
}
}
(2)P5711 【深基3.例3】闰年判断
这题是一道必须要秒杀的题,判断闰年在关于日期模拟的题目经常用到,如果不会就凉了,背也要背下来,何况就是一行代码。
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int year=sc.nextInt();
if(year%4==0&&year%100!=0||year%400==0) {
System.out.println(1);
}
else {
System.out.println(0);
}
}
}
(3)P5712 【深基3.例4】Apples
又是一道很简单的判断题,如果是0或者1就用apple,如果大于1就用apples。然后把整句话拼起来输出即可
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
if(n==0||n==1) {
System.out.println("Today, I ate "+n+" apple.");
}
else {
System.out.println("Today, I ate "+n+" apples.");
}
}
}
(4)P5713 【深基3.例5】洛谷团队系统
这题我觉得洛谷可能是为了借机宣传一下他们自己出的水题。我们手算一下就知道,当n<=5时候本地快,大于5就洛谷快。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
if(sc.nextInt()>5) {
System.out.println("Luogu");
}
else {
System.out.println("Local");
}
}
}
(5)P5715 【深基3.例8】三位数排序
我看出来了,这个章节就是为了练习if判断,但我偏不比大小,皮一下用个排序。
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int[] arr=new int[3];
arr[0]=sc.nextInt();
arr[1]=sc.nextInt();
arr[2]=sc.nextInt();
Arrays.sort(arr);
System.out.println(arr[0]+" "+arr[1]+" "+arr[2]);
}
}
(6)P5716 【深基3.例9】月份天数
之前做到的判断闰年的题在这里就派到了用场,这题也就是对应哪个月就输出相应的天使,只有2月的时候要特判下是不是闰年。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int year=sc.nextInt();
int month=sc.nextInt();
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) {
System.out.println(31);
}
else if(month==4||month==6||month==9||month==11){
System.out.println(30);
}
else {
if(year%4==0&&year%100!=0||year%400==0) {
System.out.println(29);
}
else {
System.out.println(28);
}
}
}
}
(7)P1085 不高兴的津津
这题说白了就是把学习时间最长的那天输出来,当然如果最长的那天都没有超过8小时就直接输出0.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int max=8;
int index=0;
for(int i=1;i<=7;i++) {
int sum=sc.nextInt()+sc.nextInt();
if(sum>max) {
max=sum;
index=i;
}
}
System.out.println(index);
}
}
(8)P1909 买铅笔
乍一看以为是一道完全背包问题,后面发现只会选择一种包装的铅笔。这就好办了,最稳妥的方法就是把3种花费都算出来比一比就好啦。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int a1=sc.nextInt(),b1=sc.nextInt();
int a2=sc.nextInt(),b2=sc.nextInt();
int a3=sc.nextInt(),b3=sc.nextInt();
int res=Integer.MAX_VALUE;
if(n%a1==0) {
res=Math.min(res, n/a1*b1);
}
else {
res=Math.min(res, (n/a1+1)*b1);
}
if(n%a2==0) {
res=Math.min(res, n/a2*b2);
}
else {
res=Math.min(res, (n/a2+1)*b2);
}
if(n%a3==0) {
res=Math.min(res, n/a3*b3);
}
else {
res=Math.min(res, (n/a3+1)*b3);
}
System.out.println(res);
}
}
(9)P1055 ISBN号码
为什么其他题都是入门难度,而这题却是普及难度呢?因为这道题情况比较多,但本质还是判断分支。首先用一个循环得到一个总和,再去模掉11,这里循环加要注意,如果是分隔符记得跳过。然后判断得到的这个数是否为X,再判断这个数和题目给的数是否是同一个数。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
int count=1;
int sum=0;
for(int i=0;i<11;i++) {
if(i==1||i==5) {
continue;
}
sum+=count*(int)(s.charAt(i)-'0');
count++;
}
sum%=11;
if(sum==10) {
if(s.charAt(12)=='X') {
System.out.println("Right");
}
else {
System.out.println(s.substring(0,12)+"X");
}
}
else {
if((int)(s.charAt(12)-'0')==sum) {
System.out.println("Right");
}
else {
System.out.println(s.substring(0,12)+sum);
}
}
}
}
(10)P1422 小玉家的电费
一道初中还是小学的数学题,只是现在要用编程实现。分3种情况判断一下就行
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
if(n<=150) {
System.out.println(String.format("%.1f", n*0.4463));
}
else if(n<=400) {
System.out.println(String.format("%.1f", (n-150)*0.4663+150*0.4463));
}
else {
System.out.println(String.format("%.1f", 250*0.4663+150*0.4463+(n-400)*0.5663));
}
}
}
(11)P1424 小鱼的航程(改进版)
这道题如果有两种解法,一种是时间复杂度为O(1)的方法,但是比较麻烦,需要判断很多种情况。读入数据起始是周几week,再读入游泳了几天day,首先,先分支成这个经过的天数会不会到下一个礼拜,如果不会达到下一个礼拜,则直接计算这个礼拜他游泳的天数,如果是结束在周六或周末,要当初周五处理。如果会到下一个礼拜,还是先处理第一个礼拜,把第一个礼拜游泳了多少用变量存起来,然后从第二个礼拜开始一定是从周一开始的,就有规律了,一个礼拜游泳5*250公里,但到最后一个礼拜还要再判下游了几天,自己好好推理一下。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt(),k=sc.nextInt();
int sum=0;
if(7-n>=k) { //如果第一个礼拜都过不完
if(n+k>5) {
System.out.println((5-n+1)*250);
}
else {
System.out.println(k*250);
}
}
else {
if(n<=5)
sum+=(5-n+1)*250;
k-=(7-n+1);
int d=k%7;
sum+=k/7*5*250;
if(d>5) {
sum+=250*5;
}
else {
sum+=d*250;
}
System.out.println(sum);
}
}
}
当然这题也可以模拟,思路比较简单,就跟日期一样,每天week++,到了第八天变回周一,这样时间复杂度o(n)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int week=sc.nextInt()-1,day=sc.nextInt();
int sum=0;
while(day>0) {
week++;
if(week==8) {
week=1;
}
day--;
if(week!=6&&week!=7) {
sum+=250;
}
}
System.out.println(sum);
}
}
(12)P1888 三角函数
最小锐角的正弦值,就是这三个数怎么样相除会最小,那么肯定是最小的数除那个最大的数,同时这里要用到最大公约数的模板gcd。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int a=sc.nextInt(),b=sc.nextInt(),c=sc.nextInt();
int max=Math.max(Math.max(a, b),c);
int min=Math.min(Math.min(a, b), c);
System.out.println(min/gcd(max,min)+"/"+max/(gcd(max,min)));
}
public static int gcd(int n,int m) {
if(m==0)return n;
return gcd(m,n%m);
}
}
(13)P1046 陶陶摘苹果
这题问的是陶陶能碰到摘到几个苹果,遍历所有的苹果,用一个变量来计数,如果碰的到就加1.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int[] arr=new int[10];
for(int i=0;i<10;i++) {
arr[i]=sc.nextInt();
}
int k=sc.nextInt()+30;
int sum=0;
for(int i=0;i<10;i++) {
if(arr[i]<=k) {
sum++;
}
}
System.out.println(sum);
}
}
(14)P5717 【深基3.习8】三角形分类
又是一个多分支判断的题目,对于每种类型的三角形它的三边都有一个对应的关系,根据这个关系来判断它是什么三角形。
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int[] arr=new int[3];
arr[0]=sc.nextInt();
arr[1]=sc.nextInt();
arr[2]=sc.nextInt();
Arrays.sort(arr);
if(arr[0]+arr[1]<=arr[2]) {
System.out.println("Not triangle");
}
else {
if(arr[0]*arr[0]+arr[1]*arr[1]==arr[2]*arr[2]) {
System.out.println("Right triangle");
}
else if(arr[0]*arr[0]+arr[1]*arr[1]>arr[2]*arr[2]) {
System.out.println("Acute triangle");
}
else {
System.out.println("Obtuse triangle");
}
if(arr[0]==arr[1]||arr[1]==arr[2]) {
System.out.println("Isosceles triangle");
}
if(arr[0]==arr[1]&&arr[1]==arr[2]) {
System.out.println("Equilateral triangle");
}
}
}
}
(15)P4414 [COCI2006-2007#2] ABC
一道英文题,对于这种固定了个数的题目,而且还是只有3个数,一般都很简单,因为情况就那么几种,扫下那三个字母,如果是A,输出最小的,B输出中等的,C输出最大的。
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int[] arr=new int[3];
arr[0]=sc.nextInt();
arr[1]=sc.nextInt();
arr[2]=sc.nextInt();
sc.nextLine();
String s=sc.nextLine();
Arrays.sort(arr);
for(int i=0;i<3;i++) {
if(s.charAt(i)=='A') {
System.out.print(arr[0]+" ");
}
else if(s.charAt(i)=='B') {
System.out.print(arr[1]+" ");
}
else {
System.out.print(arr[2]+" ");
}
}
}
}