
小明对数位中含有2、0、1、9的数字很感兴趣,在1到40中这样的数包括1、2、9、10至32、39和40,共28个,他们的和是574。
请问,在1到2019中,所有这样的数的和是多少?
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
int res = 0;
ArrayList list = new ArrayList<>();
list.add(2);
list.add(0);
list.add(1);
list.add(9);
for(int i = 1; i < 2020; i++){
int n = i;
while(n > 0){
if(list.contains(n % 10)){
res += i;
break;
}
n = n / 10;
}
}
System.out.println(res);
}
}
B.矩形切割
小明有一些矩形的材料,他要从这些矩形材料中切割出一些正方形。
当他面对一块矩形材料时,他总是从中间切割一刀,切出一块最大的正方形,剩下一块矩形,然后再切割剩下的矩形材料,直到全部切为正方形为止。
例如,对于一块两边分别为5和3的材料(记为5×3),小明会依次切出3×3、2×2、1×1、1×1共4个正方形。
现在小明有一块矩形的材料,两边长分别是2019和 324。
请问小明最终会切出多少个正方形?
package lanqiaobei_10;
import java.util.Scanner;
public class 矩形切割 {
public static void main(String[] args) {
int a = 2019;
int b = 324;
int count = 0;
while (b>0) {
if (a>b) {
a = a-b;
count++;
}else {
b = b-a;
count++;
}
}
System.out.println(count);
}
}
C.不同子串
一个字符串的非空子串是指字符串中长度至少为1的连续的一段字符组成的串。
例如,字符串aaab有非空子串a,b, aa,ab,aaa,aab, aaab,一共7个。
注意在计算时,只算本质不同的串的个数。
请问,字符串0100110001010001有多少个不同的非空子串?
package lanqiaobei_10;
import java.util.Scanner;
import java.util.Set;
import java.util.HashSet;
public class 不同子串 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Set S = new HashSet<>();
String s = "0100110001010001";
for(int i = 0; i < s.length(); i++) {
for(int j = i + 1; j <= s.length(); j++) {
String t = s.substring(i, j);
S.add(t);
}
}
System.out.print(S.size());
scan.close();
}
}
D.质数
我们知道第一个质数是2、第二个质数是3、第三个质数是5……请你计算第2019个质数是多少?
package lanqiaobei_10;
import java.util.Scanner;
public class 质数 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
boolean flag;
int sum=0;
for(int i=2;i<2000000000;i++)
{
flag = true;
for(int j=2;j<=Math.sqrt(i);j++)
{
if(i%j==0)
{
flag = false;
break;
}
}
if(flag)
{
sum++;
if(sum==2019)
{
System.out.println(i);
break;
}
}
}
scan.close();
}
}
E.最大降雨量
由于沙之国长年干旱,法师小明准备施展自己的一个神秘法术来求雨。
这个法术需要用到他手中的49张法术符,上面分别写着1至49这49个数字。
法术一共持续7周,每天小明都要使用一张法术符,法术符不能重复使用。
每周,小明施展法术产生的能量为这周7张法术符上数字的中位数。
法术施展完7周后,求雨将获得成功,降雨量为7周能量的中位数。
由于干旱太久,小明希望这次求雨的降雨量尽可能大,请大最大值是多少?
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// x x x x 22 23 24 25
// x x x x 26 27 28 29
// x x x x 30 31 32 33
// x x x x |34| 35 36 37
// x x x x 38 39 40 41
// x x x x 42 43 44 45
// x x x x 46 47 48 49
//把最大的全部放在后面追求数值最大化,根据中位数要求拿到34答案
System.out.print(34);
scan.close();
//可以数学思维立刻得出答案 没必要java输出
}
}
F.旋转
图片旋转是对图片最简单的处理方式之一,在本题中,你需要对图片顺时针旋转90度。
我们用一个nxm的二维数组来表示一个图片,例如下面给出一个3×4 的图片的例子:
1357
9 8 7 6
3 59 7
这个图片顺时针旋转90度后的图片如下:
3 9 1
58 3
975
7 6 7
给定初始图片,请计算旋转后的图片。
package lanqiaobei_10;
import java.util.Scanner;
public class 旋转 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
int arr[][] = new int[n][m];
for (int i = 0; i < n; i++) { // n行
for (int j = 0; j < m; j++) { // m列
arr[i][j] = scanner.nextInt(); // 输入数据
}
}
for (int i = 0; i < m; i++) { // 旋转后变成 m行
for (int j = n - 1; j >= 0; j--) { // n列
System.out.print(arr[j][i] + " "); // 打印输出
}
System.out.println();
}
}
}
G.外卖店优先级
“饱了么”外卖系统中维护着Ⅳ家外卖店,编号1~N。
每家外卖店都有一个优先级,初始时(O时刻)优先级都为0。
每经过1个时间单位,如果外卖店没有订单,则优先级会减少1,最低减到0;而如果外卖店有订单,则优先级不减反加,每有一单优先级加2。
如果某家外卖店某时刻优先级大于5,则会被系统加入优先缓存中;如果优先级小于等于3,则会被清除出优先缓存。
给定T时刻以内的M条订单信息,请你计算T时刻时有多少外卖店在优先缓存中。
package lanqiaobei_10;
import java.util.ArrayList;
import java.util.Scanner;
public class 外卖店优先级 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
int t = scanner.nextInt();
ArrayList> list = new ArrayList<>();
for (int i=0; i());
}
for (int i=0; i myList = list.get(i);
boolean[] hasOrder = new boolean[n];
for (int j=0; j 5){
isQueue[myList.get(j)-1] = true;
}
hasOrder[myList.get(j)-1] = true;
}
for (int x=0; x
H.人物相关性分析
小明正在分析一本小说中的人物相关性。
他想知道在小说中Alice和 Bob有多少次同时出现。
更准确的说,小明定义Alice和 Bob“同时出现”的意思是:在小说文本中Alice和 Bob之间不超过K个字符。
例如以下文本:
This is a story about Alice and Bob.Alice wants to send a private message to Bob.
假设K = 20,则Alice和 Bob同时出现了2次,分别是”Alice and Bob”和”Bob. Alice”。
前者Alice和 Bob之间有5个字符,后者有2个字符。
注意:
1. Alice和 Bob是大小写敏感的,alice或bob 等并不计算在内。
2. Alice 和 Bob 应为单独的单词,前后可以有标点符号和空格,但是不能有字母。
例如 Bobbi亚不算出现了Bob。
package lanqiaobei_10;
import java.util.*;
/*
*
* 1.通过lookup函数找到Alice和Bob出现的下标位置,保存在nn和mm中
* 2.fanwei这个数组用于存放句子中每一个Alice的作用范围,比如:有一个Alice的起始坐标为20,k为10,那么我们可以求得
* 它的有效范围是[subscript-k-3,subscript+5+k]=[7,35],因此fanwei[7]++,fanwei[36]--;(从7处生效,36处失效)
* 3.定义数组shouyi,这个数组用来标记每一个位置处于多少个Alice的作用范围。
* 4.最后,遍历mm,累加每一个Bob起始下标的收益即可。
* */
public class 人物相关性分析 {
public static ArrayList lookup(String keywords,String sentence) {
int index=0;
int keylen=keywords.length();
int len=sentence.length();
char[] sen=sentence.toCharArray();
ArrayList nn = new ArrayList();
int i=1;
while(true) {
int subscript=sentence.indexOf(keywords,index);
if(subscript==-1) {
break;
}
char s1=sen[subscript+keylen];
char s2=sen[subscript-1];
if(check(s1)&&check(s2)) {
nn.add(subscript-1);
i++;
}
index=subscript+keylen;
}
return nn;
}
private static boolean check(char ch) {
if((ch>='a'&&ch<='z') || (ch>='A'&&ch<='Z'))
return false;
return true;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int k=in.nextInt();
in.nextLine();
String sentence=in.nextLine();
int len=sentence.length();
String n="Alice";
String m="Bob";
ArrayList nn=lookup(n," "+sentence+" ");
ArrayList mm=lookup(m," "+sentence+" ");
int[] fanwei=new int[len];
for(int i=0;i
I.等差数列
数学老师给小明出了一道等差数列求和的题目。
但是粗心的小明忘记了一部分的数列,只记得其中N个整数。
现在给出这N个整数,小明想知道包含这N个整数的最短的等差数列有几项?
【输入格式】
输入的第一行包含一个整数N。
第二行包含N个整数A1,A2,… ,Aw。
(注意A~~A、并不一定是按等差数列中的顺序给出)
package lanqiaobei_10;
import java.util.*;
public class 等差数列1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] a=new int[n];
for(int i=0;i
J.扫地机器人
小明公司的办公区有一条长长的走廊,由N个方格区域组成,如下图所示。
走廊内部署了K台扫地机器人,其中第i台在第A;个方格区域中。
已知扫地机器人每分钟可以移动到左右相邻的方格中,并将该区域清扫干净。
请你编写一个程序,计算每台机器人的清扫路线,使得
1.它们最终都返回出发方格,
2.每个方格区域都至少被清扫一遍,
3.从机器人开始行动到最后一台机器人归位花费的时间最少。
注意多台机器人可以同时清扫同一方块区域,它们不会互相影响。
输出最少花费的时间。
在上图所示的例子中,最少花费时间是6。
第一台路线: 2-1-2-3-4-3-2,清扫了1、2、3、4号区域。
第二台路线5-6-7-6-5,清扫了5、6、7。
第三台路线10-9-8-9-10,清扫了8、9和 10。
package lanqiaobei_10;
import java.util.Scanner;
import java.util.Arrays;
//递归
public class 扫地robot {
static int arr[];//局部变量arr[] 转变 为 arr
static int n;//局部变量变为全局变量
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();//有n个格子
int k = scanner.nextInt();//一共有k个机器人
//存放数组 k 3个机器人
arr = new int[k];//存放机器人的位置
//循环k
for (int i = 0; i < k; i++) {
arr[i]=scanner.nextInt();
}
Arrays.sort(arr);//排序 符合 题目输入 5 2 10 不是 2 5 10
dfs(1, arr[0] - 1,0);
System.out.println(min*2);
}
static int min = 100000;//题目要求范围 最小值求的是走过的格子数 如:2号位置的机器人左边来回2个格子 2分钟
//定义一个方法叫 dfs
//可以分2种情况 机器人是否在最后的位置
//k代表第几个机器人
// 2 (第一个机器人) 5(第2个机器人) 10(第三个机器人)
public static void dfs(int k,int before,int max) {//before 为步数
if (k == arr.length) {
//这个机器人能走多少步?
//temp为左边步数
int temp = before + n - arr[arr.length - 1];
max = Math.max(max, temp);//max 为当前这种走法 所有机器人走的最多的一个机器人的步数
min = Math.min(min, max);//求的是 所有走法的最大值 取一个最短的时间
}else {//不是最后一个机器人能走多少步?
// 第2个机器人的位置减去第一个机器人的位置 再减1
for (int i = 0; i < arr[k] - arr[k - 1] - 1; i++) {//i 代表往后走i步 最多只能走 后一个机器人 减前一个机器人的位置 再减1
int temp =before +i; //第 k个机器人走的步数
dfs(k+1, arr[k] - arr[k - 1] - 1-i,Math.max(max, temp));// 第k+1个机器人 前面还剩余 arr[k] - arr[k - 1] - 1-i 的步数没走
}//max 代表k个机器人之前所以机器人走的最大步数
}
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)