首页 > 其他分享 >SMU Winter 2023 Round #12 (Div.2)

SMU Winter 2023 Round #12 (Div.2)

时间:2023-02-16 22:58:32浏览次数:38  
标签:arr 12 Winter int SMU System Scanner nextInt scanner

A.KK画猪

题目:

输入pig,输出一些字符。

代码:

点击查看代码
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		String s = scanner.next();
		System.out.println("  (\\____/)\r\n"
				+ "  / @__@ \\\r\n"
				+ " (  (oo)  )\r\n"
				+ "  `-.~~.-'\r\n"
				+ "   /    \\\r\n"
				+ " @/      \\_\r\n"
				+ "(/ /    \\ \\)\r\n"
				+ " WW`----'WW\r\n"
				+ "");
	}
}

B.KK学几何

题意:

已知 kk 会考你三种图形,分别是圆,三角形和矩形,分别用 "1","2","3" 来表示三种图形:

如果是 1,则会告诉你圆的半径 r。
如果是 2,则会告诉你三角形的底 L 和高 h。
如果是 3,则会告诉你矩形的长 L 和宽 W。
现在希望你把 kk 给你的所有图形的面积累加起来,并保留 1 位小数。

并且我们约定 π=3。

思路:

按照题意求解即可

代码:

点击查看代码
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		float sum = 0;
		while(n-->0) {
			int select = scanner.nextInt();
			float s = 0;
			if(select == 1) {
				int r = scanner.nextInt();
				s = 3*r*r;
				sum += s;
			}else if(select == 2) {
				int L = scanner.nextInt();
				int h = scanner.nextInt();
				s = (float)L*h/2;
				sum += s;
			}else if(select == 3) {
				int L = scanner.nextInt();
				int W = scanner.nextInt();
				s = L*W;
				sum += s;
			}
		}
		System.out.printf("%.1f",sum);
	}
}

C.KK 看跳舞

题意:

给一个数组,里面有1~n,n个数不重复,让最后一个数和第一个数相连,判断是不是顺时针或者逆时针,是就输出YES,不是就输出NO。

思路:

首先我想到的是用两个相同顺时针或者逆时针的字符串判断是否包含该数组转化成的字符串来判断。但是会超时。
后面得到规律:顺时针或者逆时针的时候两个数只可能相差 1 或者 n-1,且只有1 和 n之间会是这种差值。其他的情况就不满足条件了。

代码:

点击查看代码
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int T = scanner.nextInt();
		while(T-->0) {
			int n = scanner.nextInt();
			int[] arr = new int[n];
			for(int i = 0;i < n;i++) {
				arr[i] = scanner.nextInt();
			}
			boolean flag = true;
			for(int i = 0;i < n-1;i++) {
				if(Math.abs(arr[i]-arr[i+1])==1) {
				}else if(Math.abs(arr[i]-arr[i+1])==n-1&&arr[i+1]==n){
				}else {
					flag = false;
					break;
				}
			}
			if(flag) {
				System.out.println("YES");
			}else {
				System.out.println("NO");
			}
		}
	}
}

D.KK与十佳

题意:

在一组数里面找到一个数,使得其他数的乘积为最大,输出这个数。

思路:

这个题需要分类讨论一下,最后结果的大小与数的正负,以及负数的个数是有关的。
如果全部是正数的话,那么就是去掉最小的正数即可;
如果全部是负数的话,就要分两种情况了,如果是奇数个负数,那么去掉这个数之后就剩偶数个负数,最后乘积为正,所以绝对值上就要尽量大,就去掉最大的那个负数,例如-3,-2,-1,去掉-1;如果是偶数个负数的话,去掉一个后,最后得到的结果是负数,所以绝对值上就要尽量大,就去掉最小的负数,例如 -3,-2,-1,去掉-3.
如果是偶数个负数加上n个正数(正数多少不影响),就不要去掉负数,不然会使结果为负,去掉最小的正数即可。
如果是奇数个负数加上n个正数,就去掉绝对值最小的负数即可,与上面那个全负且奇的情况一样。

代码:

点击查看代码
import java.util.Arrays;
import java.util.Scanner;
public class MainH {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		int[] arr = new int[n+1];
		int[] arr1 = new int[n+1];
		int[] arr2 = new int[n+1];
		int a = 1,b = 1;
		int pos = 0;
		int nag = 0;
		for(int i = 1;i <= n;i++) {
			arr[i] = scanner.nextInt();
			if(arr[i]>0) {
				arr1[a++] = arr[i]; 
			}else {
				arr2[b++] = arr[i];
			}
		}
		Arrays.sort(arr1,1,a);
		Arrays.sort(arr2,1,b);
		if(b==1) {
			System.out.println(arr1[1]);
		}else if(b>1&&(b-1)%2==0) {
			if(a==1) {
				System.out.println(arr2[1]);				
			}else {
				System.out.println(arr1[1]); //偶数个负数且有正数的情况下千万不要动负数,不然最后为负
			}
		}else if(b>1&&(b-1)%2==1) {
			System.out.println(arr2[b-1]);
		}
	}
}

E.KK 买股票

题意:

在一组数中找到两个数满足顺序对,且差值最大,求这个差值。

思路:

最开始想的是一对一对减,求最大值,但是会超时,后面找到了另一种方法。
首先我们找到最大值和最小值,如果这两个数是非逆序的,那么就是最大的差值。如果是逆序的,就从最大值向前找前面的最小值,最小值向后找后面的最大值,找出来求差值并比较大小,将较大差值选出来作为最大值。

代码:

点击查看代码
import java.util.Scanner;
public class MainI {
	static int arr[];
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		arr = new int[n];
		int mini=0,min = 1000;
		int maxi=0,max = 0;
		for(int i = 0;i < n;i++) {
			arr[i] = scanner.nextInt();
			if(arr[i]>max) {
				max = arr[i];
				maxi = i;
			}
			if(arr[i]<min) {
				min = arr[i];
				mini = i;
			}
		}
		max = findmax(mini,maxi);
		System.out.println(max);
		
	}
	public static int findmax(int mini,int maxi) {
		if(maxi>=mini) return arr[maxi]-arr[mini];
		if(maxi==mini) return 0;
		int max = 0;
		int min = 1000;
		int l = mini;
		int r = maxi;
		for(int i = 0;i <= r;i++) {
			if(arr[i]<min) {
				min = arr[i];
				mini = i;
			}
		}
		for(int i = l;i < arr.length;i++) {
			if(arr[i]>max) {
				max = arr[i];
				maxi = i;
			}
		}
		return Math.max(findmax(l,maxi), findmax(mini,r));
	}
}

F.KK学英语

题意:

给出一个字符串,将里面单独的" is " 全部换成" was ",最后行末不能有空格。

思路:

直接使用字符串的replace函数,再用trim()函数去掉无用空格,但注意就是" is is "的情况中用replace方法只会替换前面一个,一直不知道怎么办。后面就是连续用了两次replace函数就成功了。第一次可能因为空格原因只替换了一个,后面的话之前的" is "全部变成" was "了,就不会影响第二次的替换了。

代码:

点击查看代码
import java.util.Scanner;
public class MainJ {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		String str = scanner.nextLine();
		String str1 = "";
		str1 = str.replace(" is ", " was ");
		str1 = str1.replace(" is ", " was ");
		str1 = str1.trim();
		System.out.println(str1);
	}
}

标签:arr,12,Winter,int,SMU,System,Scanner,nextInt,scanner
From: https://www.cnblogs.com/Tcoo/p/17113125.html

相关文章

  • SMU Winter 2023 Round #11 (Div.2)
    A.BCD题意:输入两个数,一个是数的数量N,另一个是每个箱子能够装多少书M,问需要多少个箱子。思路:我们只需要用书n的数量去除以容量m,然后判断一下取模有没有余数,有的话就结果......
  • SMU Winter 2023 Round #10 (Div.2)
    A.社团招新题目:计网院里面有n个学生。他们中任意一些人都可以成立一个社团。如果社团满足3男有1女,就可以一对情侣一对基。但是院里要求这些社团有如下要求:•为方便......
  • SMU Winter 2023 Round #9 (Div.2)
    A.WhoisThe19thZUCCPCChampion签到题,输出即可。B.JiubeiandOverwatch题目:JiubeilovesplayingOverwatchevenifitisalongtimesincethelastupdate.......
  • Linux : Failed to connect to 127.0.0.1 port 8888 拒绝连接
    Failedtoconnectto127.0.0.1port8888:拒绝连接分析:lsof-i:8888发现端口未被占用查看代理:env|grep-iproxyhttps_proxy=127.0.0.1:8888http_proxy=127.0.......
  • 内网渗透-winserver2012抓取明文密码
    问题引入:winserver2012使用mimikatz是无法抓取明文密码的,要获取明文密码需要修改其注册表。法一:在未修改注册表的情况下,使用mimikatz来读取密码:privilege::debugseku......
  • 12.6用程序来表示人类的思考方式
           人工智能是用计算机来实现人类智能的尝试。......
  • 题解 CF1292A
    题目大意:给你\(2\timesn\)的迷宫,初始时没有任何障碍,给定\(q\)次询问,每次询问给予坐标\((x,y)\),问将坐标\((x,y)\)反转状态(即无障碍变有障碍,有障碍变无障碍)后,该迷......
  • 12.4程序生成随机数的方法
       随机数色子是用来产生随机数的一种工具,每个色子有20面。晃动随机数色子后,出现在正面的数字就是随机数。由于计算机没法去晃动随机数色子,因此程序一般会通过生成类......
  • CF522A 1200 *
    题意Polycarp在他的微博上发布了一张有趣的照片。他的很多朋友就开始在微博上转发这张图片,这个事情可以被一个字符串描述:name1repostedname2,意思是说name1这个人转发了n......
  • CF729B 1200
    题意解析我写的朴素的二维前缀和,这样比较麻烦可以这样,f1[i][j]代表当前行第一个到第j个的前缀和f1[i][j]=f1[i][j-1]+a[i][j]f2[i][j]代表当前列第一个到第i个的前......