洛谷题单:【入门2】分支结构

(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]+" ");
			}
		}
	}
}

发布了12 篇原创文章 · 获赞 15 · 访问量 3388

猜你喜欢

转载自blog.csdn.net/qq_43751506/article/details/104865656