Compare commits

...

1 Commits

Author SHA1 Message Date
ProgramLight 6b370e541c 上传文件至 '' 2023-04-23 12:30:47 +00:00
49 changed files with 1583 additions and 0 deletions

87
AB问题.java Normal file
View File

@ -0,0 +1,87 @@
package LanQiaoOJ;
/*1-输入两个正整数 A,B请你计算 A+B并输出。*/
import java.util.Scanner;
/*
public class LanqiaoOJ_0001 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()) {
int a=sc.nextInt();
int b=sc.nextInt();
System.out.println(a+b);
}
}
}
*/
//2-输入n表示n组数每组输入两个数请计算出每组数的和
/*
public class LanqiaoOJ_0001 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()) {
int n=sc.nextInt();//读入有几组测试数据
for(int i=0;i<n;i++) {
int a=sc.nextInt();
int b=sc.nextInt();
System.out.println(a+b);
}
}
}
}
*/
/*
* 3-输入包含多个测试用例每个测试用例都包含一个整数N然后N个整数在同一行中每个整数以及同一行整数之和都在int范围内
以0开始的测试用例会终止输入并且不会处理该测试用例
输出
对于每组输入整数您应该为每行输入数据输出一行在这行中输出它们的总和*/
/*
public class LanqiaoOJ_0001 {
i
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()) {
int n=sc.nextInt();//读入有几组测试数据
if(n==0)
break;
int sum=0;//用来记录每次累加的值
for(int i=0;i<n;i++) {
sum+=sc.nextInt();//循环n次每次读入一个正数累加到sum
}
System.out.println(sum);
}
}
}
*/
/*
* 4-输入
* 在第一行包含一个整数N然后跟随N行每行以一个整数M开始然后M个整数跟在同一行中
输出
对于每组输入整数您应该在一行中输出它们的总和并且在输入中为每行输出一行输出每组数据间用空行隔开
*/
public class AB问题 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()) {
int n=sc.nextInt();//读入每组组测试数据有几个
int t=sc.nextInt();//读入有几组测试数据
int sum=0;//用来记录每次累加的值
for(int j=0;j<t;j++) {
for(int i=0;i<n;i++) {
sum+=sc.nextInt();//循环n次每次读入一个正数累加到sum
}
System.out.println(sum);
}
System.out.println();
}
}
}

35
乌托邦树.java Normal file
View File

@ -0,0 +1,35 @@
package LanQiaoOJ;
import java.math.BigInteger;
import java.util.Scanner;
/*
* 题目描述
实现一个算法得到乌托邦树的高度介绍如下
乌托邦树每年经历2个生长周期每年春天它的高度都会翻倍每年夏天它的高度都会增加1米
对于一颗在春天开始时种下的高1米的树问经过指定周期后树的高度为多少*/
public class 乌托邦树 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int t=sc.nextInt();
//使用高精度
/*BigInteger h=new BigInteger("1");
for(int i=0;i<t;i++) {
if(i%2==0)
h=h.multiply(new BigInteger("2"));
else
h=h.add(new BigInteger("1"));
}*/
int h=1;
for(int i=0;i<t;i++) {
if(i%2==0)
h=h*2;
else
h=h+1;
}
System.out.print(h);
}
}

View File

@ -0,0 +1,17 @@
package LanQiaoOJ;
import java.math.BigInteger;
/*
* 问题描述
本题为填空题只需要算出结果后在代码中使用输出语句将
所填结果输出即可
九进制正整数(2022)9转换成十进制等于多少*/
public class 九进制转十进制 {
public static void main(String[] args) {
String n=new BigInteger("2022",9).toString(10);
System.out.print(n);
}
}

View File

@ -0,0 +1 @@
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

View File

@ -0,0 +1,20 @@
package LanQiaoOJ;
import java.util.Scanner;
public class 二进制中1的个数2 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
/*
* 获得二进制方法还可用
* 1-BigInteger
* 2-toString返回小写toUpperCase()--返回大写
* 3-bitCount
* Integer.person*/
int count=Integer.bitCount(n);
System.out.print(count);
}
}

View File

@ -0,0 +1,17 @@
package LanQiaoOJ;
//使用按位运算符
import java.util.Scanner;
public class 二进制中1的个数3 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int count=0;
while(n>0) {
if((n&1)==1)
count++;
n>>=1;
}
System.out.print(count);
}
}

38
单词分析.java Normal file
View File

@ -0,0 +1,38 @@
package LanQiaoOJ;
import java.util.Scanner;
/*
* 请你帮助小蓝给了一个单词后帮助他找到出现最多的字母和这 个字母出现的次数
输入描述
输入一行包含一个单词单词只由小写英文字母组成对于所有的评测用例输入的单词长度不超过 1000
输出描述
输出两行第一行包含一个英文字母表示单词中出现得最多的字母是哪
如果有多个字母出现的次数相等输出字典序最小的那个
第二行包含一个整数表示出现得最多的那个字母在单词中出现的次数*/
public class 单词分析 {
static int N=1000;
static int [] a =new int [N];
public static void main(String [] args) {
Scanner sc=new Scanner(System.in);
String s=sc.next();
for(int i=0;i<s.length();i++) {
char c=s.charAt(i);
a[c-'a']++;
}
char ch='a';
int max=0;
for(int i=0;i<26;i++) {
if(a[i]>max) {
max=a[i];
ch=(char)(i+'a');
}
}
System.out.println(ch);
System.out.println(max);
}
}

18
卡牌.java Normal file
View File

@ -0,0 +1,18 @@
package LanQiaoOJ;
public class 卡牌 {
/*题目描述
小蓝有很多数字卡片每张卡片上都是数字0到9
小蓝准备用这些卡片来拼一些数他想从1开始拼出正整数每拼一个就保存起来卡片就不能用来拼其它数了
小蓝想知道自己能从1拼到多少
例如当小蓝有30张卡片其中0到9各3张则小蓝可以拼出1到10
但是拼11时卡片1已经只有一张了不够拼出11
现在小蓝手里有0到9的卡片各2021张共20210张
问小蓝可以从1拼到多少
提示建议使用计算机编程解决问题*/
public static void main(String[] args) {
}
}

65
含2天数.java Normal file
View File

@ -0,0 +1,65 @@
package LanQiaoOJ;
/*含2天数
* 题目描述
本题为填空题只需要算出结果后在代码中使用输出语句将所填结果输出即可
小蓝特别喜欢 2今年是公元 2020年他特别高兴因为每天日历上都可以看到 2
如果日历中只显示年月日请问从公元 1900 1 月1 日到公元 9999 12 31 一共有多少天日历上包含
2即有多少天中年月日的数位中包含数字 2
*/
public class 含2天数 {
//代表月份天数从下标为1开始
static int[] w= {0,31,28,31,30,31,30,31,31,30,31,30,31};
//代表年月日
static int y=1900,m=1,d=1;
public static void main(String[] args) {
int count=0; //统计含2天数
//循环结束条件为y=9999&&m=12&&d=31
while(y!=9999||m!=12||d!=31) {
//判断是否为闰年
if(y%400==0||y%4==0&&y%100!=0)
w[2]=29;
else
w[2]=28;
//判断是否是我们要求的日期
if(check())
count++;
//日期变更
d++;
if(d>w[m]) {
m++;
d=1;
}
if(m>12) {
y++;
m=1;
}
}
System.out.println(count+1);
}
static boolean check() {
// TODO Auto-generated method stub
//不能直接操作y因为其是一个全局变量
int a=y;
while(a>0) {
if(a%10==2)
return true;
a/=10;
}
int b=m;
while(b>0) {
if(b%10==2)
return true;
b/=10;
}
int c=d;
while(c>0) {
if(c%10==2)
return true;
c/=10;
}
return false;
}
}

22
啤酒与饮料.java Normal file
View File

@ -0,0 +1,22 @@
package LanQiaoOJ;
/*啤酒与饮料
* 题目描述
啤酒每罐 2.3元饮料每罐 1.9元小明买了若干啤酒和饮料一共花了 82.3元
我们还知道他买的啤酒比饮料的数量少请你计算他买了几罐啤酒*/
public class 啤酒与饮料 {
public static void main(String[] args) {
int x,y;//分别表示啤酒与饮料的数量
for(x=1;x<35;x++)
for(y=1;y<43;y++) {
if(x<y&&2.3*x+1.9*y==82.3) {
System.out.println(x);
}
}
}
}
/*
* 总结
* 在做本题时首先想到的是想用数学方法解决建立等式但是在本题中
* 如果采用一般的数学思维很有可能做不出来因为从题干中只能得到一个等式和一个不等式无法解决
* 此题从编程角度看实际上非常简单两个嵌套循环遍历再用一个if语句判断便可直接得出结果
*/

30
字母数.java Normal file
View File

@ -0,0 +1,30 @@
package LanQiaoOJ;
/*
* 问题描述
请找到一个大于2022的最小数这个数转换成十六进制之
所有的数位不含前导0都为字母A到F)
请将这个数的十进制形式作为答案提交*/
public class 字母数 {
public static void main(String[] args) {
//在此输入您的代码...
for(int i=2022;true;i++){
if(check(i)){
System.out.print(i);
break;
}
}
}
static boolean check(int i){
while(i/16>0){
if(i%16>=10&&i%16<=15){
i/=16;
}else{
return false;
}
}
if(i>=10&&i<=15) {
return true;
}
return false;
}
}

44
字符统计.java Normal file
View File

@ -0,0 +1,44 @@
package LanQiaoOJ;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;
/*给定一个只包含大写字母的字符串 S, 请你输出其中出现次数最多的字符
如果有多个字母均出现了最多次, 按字母表顺序依次输出所有这些字母
输入格式
一个只包含大写字母的字符串 S.
输出格式
若干个大写字母代表答案 */
public class 字符统计 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String s=sc.next();
//需要一个东西去统计每个字符出现的次数
HashMap<Character,Integer>hashMap=new HashMap<>();
for(int i=0;i<s.length();i++) {
char c=s.charAt(i);
hashMap.put(c, hashMap.getOrDefault(c,0)+1);
}
//统计出现最多的字符
int max=0;
//用来存答案
ArrayList<Character> list=new ArrayList<>();
for(char key:hashMap.keySet()) {
int x=hashMap.get(key);
if(x>max) {
list.clear();
list.add(key);
max=x;
}else if(x==max) {
list.add(key);
}
}
for(char c:list) {
System.out.print(c);
}
}
}

35
字符统计2.java Normal file
View File

@ -0,0 +1,35 @@
package LanQiaoOJ;
import java.util.ArrayList;
import java.util.Scanner;
public class 字符统计2 {
static int[] a=new int[26];
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String s=sc.next();
//需要一个东西去统计每个字符出现的次数
for(int i=0;i<s.length();i++) {
//记录出现最多次字符的出现次数+-
char c=s.charAt(i);
a[c-'A']++;
}
//存答案
ArrayList<Integer>list=new ArrayList<>();
int max=0;
for(int i=0;i<26;i++) {
if(a[i]>max) {
list.clear();
max=a[i];
list.add(i);
}else if(a[i]==max) {
list.add(i);
}
}
for(int i:list) {
System.out.print((char)(i+'A'));
}
}
}

63
完全日期.java Normal file
View File

@ -0,0 +1,63 @@
package LanQiaoOJ;
/*完全日期*/
/*如果一个日期中年月日的各位数字之和是完全平方数则称为一个完全日期
例如2021 6 5 日的各位数字之和为 2+0+2+1+6+5=16而 16 是一个完全平方数它是 4 的平方
所以 2021 6 5 日是一个完全日期
例如2021 6 23 日的各位数字之和为 2+0+2+1+6+2+3=16是一个完全平方数所以 2021 6 23 日也是一个完全日期
请问 2001 1 月1 日到 2021 12 31 日中一共有多少个完全日期*/
public class 完全日期 {
//每月天数下标从1开始
static int [] w= {0,31,28,31,30,31,30,31,31,30,31,30,31};
//年月日
static int y=2001,m=1,d=1;
public static void main(String[] args) {
int count=0;
//循环结束条件
while(y!=2021||m!=12||d!=31) {
//判断是否闰年>判断2月天数
if(y%400==0||y/400==0&&y/100!=0)
w[2]=29;
else
w[2]=28;
//判断是否完全平方
if(check())
count++;
//日期变更
d++;
if(d>w[m]) {
m++;
d=1;
}
if(m>12) {
y++;
m=1;
}
}
System.out.print(count);
}
static boolean check() {
//统计
int sum=0;
//y为全局变量不可直接改动
int a=y;
//得出年份各数字之和
while(a>0) {
sum+=a%10;
a/=10;
}
int b=m;
while(b>0) {
sum+=b%10;
b/=10;
}
int c=d;
while(c>0) {
sum+=c%10;
c/=10;
}
//判断是否为平方数
int mark=(int)Math.sqrt(sum);
return mark*mark==sum;
}
}

View File

@ -0,0 +1,36 @@
package LanQiaoOJ;
import java.util.Scanner;
/*题目描述
实现一个算法在数组中找到 3 个数字的最大乘积介绍如下
例如数组 [5, -2, 3, 1, -1, 4] 3 个数字的最大乘积为 60
输入描述
第一行为数字N (3N1000)表示数组元素的个数
第二行为数组元素 Ai1000Ai1000
输出描述
输出一行 3 个数字的最大乘积
*/
public class 寻找三个数的最大乘积 {
static int N=1010;
static int []a=new int [N];
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for(int i=0;i<n;i++) {
a[i]=sc.nextInt();
}
int ans=(int)-1e9;//考虑数组中有负数的情况极限情况
for(int i=0;i<n;i++) {
for(int j=i+1;j<n;j++) {
for(int k=j+1;k<n;k++) {
ans=Math.max(ans, a[i]*a[j]*a[k]);
}
}
}
System.out.println(ans);
}
}

View File

@ -0,0 +1,23 @@
package LanQiaoOJ;
import java.util.Arrays;
import java.util.Scanner;
public class 寻找三个数的最大乘积2 {
static int N=1010;
static int []a=new int [N];
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for(int i=0;i<n;i++) {
a[i]=sc.nextInt();
//如果都是整数贪心算法选出最大三个
Arrays.sort(a,0,n);//数组排序算法时间复杂度nlogn
int ans=a[n-1]*a[n-2]*a[n-3];
ans=Math.max(ans, a[0]*a[1]*a[n-1]);
System.out.print(ans);
}
}
}

View File

@ -0,0 +1,25 @@
package LanQiaoOJ;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Ñ°ÕÒÈý¸öÊýµÄ×î´ó³Ë»ý3 {
static int N=1010;
static int []a=new int [N];
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
ArrayList<Integer>list=new ArrayList<>();
for(int i=0;i<n;i++) {
int x=sc.nextInt();
list.add(x);
}
Collections.sort(list);
int ans=list.get(n-1)*list.get(n-2)*list.get(n-3);
ans=Math.max(ans, list.get(0)*list.get(1)*list.get(n-1));
System.out.print(ans);
}
}

20
小蓝做实验.java Normal file
View File

@ -0,0 +1,20 @@
package LanQiaoOJ;
/*
* 问题描述
小蓝很喜欢科研他最近做了一个实验得到了一批实验
数据一共是两百万个正整数
如果按照预期所有的实验数据x都应该满足10^7x10^8
但是做实验都会有一些误差会导致出现一些预期外的
数据这种误差数据y的范围是10^3y10^12
由于小蓝做实验很可靠所以他所有的实验数据中
99.99%以上都是符合预期的
小蓝的所有实验数据都在primes.txt中现在他想统计
这两百万个正整数中有多少个是质数你能告诉他吗*/
public class 小蓝做实验 {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}

29
小蓝吃糖果.java Normal file
View File

@ -0,0 +1,29 @@
package LanQiaoOJ;
import java.util.Scanner;
/*小蓝吃糖果
* 题目描述
小蓝有 n 种糖果每种数量已知小蓝不喜欢连续 2次吃同样的糖果问有没有可行的吃糖方案
输入描述
第一行是整数 n(0<n<1000000)
第二行包含 n 个数表示 n 种糖果的数量mi0<mi<1000000
输出描述
输出一行包含一个 Yes no */
public class 小蓝吃糖果 {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
int n=sc.nextInt();//1e6
//ans表示统计所有的糖果数量
long ans=0;
//统计最大糖果数量
int max=0;
for(int i=0;i<n;i++) {
int x=sc.nextInt();
ans=ans+x;
max=Math.max(x, max);
}
//L表示long类型
System.out.print(max*2L>ans?"No":"Yes");
}
}

45
成绩分析.java Normal file
View File

@ -0,0 +1,45 @@
package LanQiaoOJ;
import java.util.Scanner;
/*
* 题目描述
小蓝给学生们组织了一场考试卷面总分为100分每个
学生的得分都是一个0到100的整数
请计算这次考试的最高分最低分和平均分
输入描述
输入的第一行包含一个整数n(1n104)表示考试
人数
接下来行每行包含一个0至100的整数表示一个学
生的得分
输出描述
输出三行
第一行包含一个整数表示最高分
第二行包含一个整数表示最低分
第三行包含一个实数四舍五入保留正好两位小数表示平均分*/
public class 成绩分析 {
static int [] a =new int [10000];
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
double s=sc.nextInt();
int sum=0,max=0,min=110;
for(int i=0;i<s;i++) {
a[i]=sc.nextInt();
if(a[i]>max) {
max=a[i];
}
if(a[i]<min) {
min=a[i];
}
sum=sum+a[i];
}
double ave=sum/s;
System.out.println(max);
System.out.println(min);
System.out.printf("%.2f",ave);
}
}

35
成绩统计.java Normal file
View File

@ -0,0 +1,35 @@
package LanQiaoOJ;
import java.util.Scanner;
/*
* 题目描述
小蓝给学生们组织了一场考试卷面总分为 100 每个学生的得分都是一个 0 100 的整数
如果得分至少是 60 则称为及格如果得分至少为 85 则称为优秀
请计算及格率和优秀率用百分数表示百分号前的部分四舍五入保留整
输入描述
输入的第一行包含一个整数 n (1n10^4)表示考试人数
接下来 n行每行包含一个 0 100 的整数表示一个学生的得分
输出描述
输出两行每行一个百分数分别表示及格率和优秀率百分号前的部分 四舍五入保留整数*/
public class 成绩统计 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int [] arr=new int[n];
int count=0,mark=0;
for(int i=0;i<n;i++) {
arr[i]=sc.nextInt();
if(arr[i]>=60){
if(arr[i]>=85){
mark++;
}
count++;
}
}
System.out.println((Math.round(count*100)/n)+"%");
System.out.println(Math.round((mark*100)/n)+"%");
}
}

30
数数.java Normal file
View File

@ -0,0 +1,30 @@
package LanQiaoOJ;
/*
* 问题描述
任何一个大于1的正整数都能被分解为若干个质数相
比如28=2×2×7被分解为了三个质数相乘
请问在区间[2333333,23333333]中有多少个正整数
可以被分解为12个质数相乘*/
public class 数数 {
static int ans=0;
public static void main(String[] args) {
for(int i=2333333;i<2333333;i++) {
int t=i;
int x=0;
for(int j=2;j<j/t;j++) {
while(t%j==0) {
x++;
t/=j;
}
}
if(t>1) {
x++;
}
if(x==12)
ans++;
}
System.out.print(ans);
}
}

46
星期几.java Normal file
View File

@ -0,0 +1,46 @@
package LanQiaoOJ;
/*题目描述
本题为填空题只需要算出结果后在代码中使用输出语句将所填结果输出即可
1949 年的国庆节 10 1 是星期六
今年2012的国庆节是星期一
那么从建国到现在有几次国庆节正好是星期日呢
不要求写出具体是哪些年只要一个数目*/
public class 星期几 {
//每月天数下标从1开始
static int [] w= {0,31,28,31,30,31,30,31,31,30,31,30,31};
//年月日星期
//t=0表示星期天t=1表示星期一
static int y=1949,m=10,d=1,t=6;
public static void main(String[] args) {
int count=0;
//循环结束条件
while(y!=2012||m!=10||d!=1) {
//判断是否闰年>判断2月天数
if(y%400==0||y/400==0&&y/100!=0)
w[2]=29;
else
w[2]=28;
//判断是否完全平方
if(check())
count++;
//日期变更
d++;
//
t++;
t%=7;
if(d>w[m]) {
m++;
d=1;
}
if(m>12) {
y++;
m=1;
}
}
System.out.print(count);
}
static boolean check() {
return m==10&&d==1&&t==0;
}
}

19
星期计算.java Normal file
View File

@ -0,0 +1,19 @@
package LanQiaoOJ;
/*
* 问题描述
本题为填空题只需要算出结果后在代码中使用输
出语句将所填结果输出即可
已知今天是星期六请问20^22天后是星期几
注意用数字1到7表示星期一到星期日*/
public class 星期计算 {
public static void main(String[] args) {
int ans=1;
for(int i=0;i<22;i++) {
ans*=20;
ans%=7;
}
System.out.print(ans+6);
}
}

View File

@ -0,0 +1,37 @@
package LanQiaoOJ;
import java.util.Scanner;
/*
* 实现一个算法寻找最大化股票交易利润的策略介绍如下
股票价格每天都在变化以数组的索表示交易日以数组的元素表示每天的股票价格
可以通过买入和卖出获得利润一天只能进行一次买入或卖出操作一次买入加卖出操作称为一次交易次数
你只能交易一次求使得利润最大的交易策略
输入描述
第一行为数字N,表示共有N天
第二行为N个数字A,表示每天的股票价格
其中1N,A104**/
public class 最大化交易利润 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int []a=new int[n];
for(int i=0;i<n;i++) {
a[i]=sc.nextInt();
}
//最大利润
int ans=(int)-1e4;
//价格最低的时候
int min=(int)1e4;
//循环枚举出那天卖出
for(int i=0;i<n;i++) {
if(i>0)
ans=Math.max(ans, a[i]-min);
min=Math.min(min, a[i]);
}
System.out.print(ans);
}
}

View File

@ -0,0 +1,35 @@
package LanQiaoOJ;
/*题目描述
给定一个数组找到两个总和为特定值的索引
例如给定数组 [1, 2, 3, -2, 5, 7]给定总和 7则返回索引 [1, 4]
若有多组符合情况则输出索引对中小索引最小的一组
输入描述
第一行为给定数组的长度不超过 100
第二行为数组元素元素大小不超过 100可能为负数
第三行为特定值
输出描述
输出一行为两个索引值升序输出*/
import java.util.Scanner;
public class 查找两个总和为特定值的索引 {
static int N=110;
static int [] a=new int[N];
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for(int i=0;i<n;i++) {
a[i]=sc.nextInt();
}
int target=sc.nextInt();
for(int i=0;i<n;i++)
for(int j=0;j<n;j++) {
if(a[i]+a[j]==target) {
System.out.println(i+" "+j);
return;
}
}
}
}

View File

@ -0,0 +1,29 @@
package LanQiaoOJ;
import java.util.HashMap;
import java.util.Scanner;
public class 查找两个总和为特定值的索引2 {
static int N=110;
static int [] a=new int[N];
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
//key-value结构
HashMap<Integer,Integer>map=new HashMap<>();
for(int i=0;i<n;i++) {
a[i]=sc.nextInt();
map.put(a[i],i);
}
int target=sc.nextInt();
for(int i=0;i<n;i++) {
int A=a[i];
if(map.containsKey(target-A)) {
System.out.println(i+" "+map.get(target-A));
return;
}
}
}
}

34
查找整数.java Normal file
View File

@ -0,0 +1,34 @@
package LanQiaoOJ;
/*
* 问题描述
给出一个包含n个整数的数列问整数a在数列中的第一次出现是第几个
输入格式
第一行包含一个整数n
第二行包含n个非负整数为给定的数列数列中的每个数都不大于10000
第三行包含一个整数a为待查找的数
输出格式
如果a在数列中出现了输出它第一次出现的位置(位置从1开始编号)否则输出-1*/
import java.util.Scanner;
public class 查找整数{
static int N=10000;
static int [] a=new int[N];
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();//确定数组大小
for(int i=0;i<n;i++) {
a[i]=sc.nextInt();//将数据存入数组
}
int mark=0;
int s=sc.nextInt();//要查找的数
for(int i=0;i<a.length;i++) {
if(a[i]==s) {
mark=1;
System.out.println(i+1);
break;
}
}
if(mark==0) {
System.out.println(-1);
}
}
}

24
棋盘放麦子.java Normal file
View File

@ -0,0 +1,24 @@
package LanQiaoOJ;
import java.math.BigInteger;
/*题目描述
你一定听说过这个故事国王对发明国际象棋的大臣很佩服问他要什么报酬
大臣说请在第 1 个棋盘格放 1 粒麦子在第 2 个棋盘格放 2 粒麦子在第 3 个棋盘格放 4 粒麦子
在第 4 个棋盘格放 8 粒麦子......后一格的数字是前一格的两倍直到放完所有棋盘格国际象棋共有 64
请你借助计算机准确地计算到底需要多少粒麦子*/
public class 棋盘放麦子 {
public static void main(String[] args) {
//总数
BigInteger ans=new BigInteger("1");
//每格的个数
BigInteger a=new BigInteger("1");
for(int i=2;i<=64;i++) {
a=a.multiply(new BigInteger ("2"));
ans=ans.add(a);
}
System.out.print(ans);
}
}

20
武功秘籍.java Normal file
View File

@ -0,0 +1,20 @@
package LanQiaoOJ;
//武功秘籍
import java.util.Scanner;
/*
* 书的第 10 页和第 11 页在同一张纸上但第 11 页和第 12 页不在同一张纸上
小明只想练习该书的第 81页到第 92 页的武功又不想带着整本书请问他至少要撕下多少张纸带走*/
public class 武功秘籍 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int p1=sc.nextInt();
int p2=sc.nextInt();
int count;
if(p1%2!=0&&p2%2==0) {
count=(p2-p1)/2+2;
}else {
count=(p2-p1)/2+1;
}
System.out.println(count);
}
}

35
求和.java Normal file
View File

@ -0,0 +1,35 @@
package LanQiaoOJ;
import java.util.Scanner;
/*
* 问题描述
给定n个整数a1,a2,··,am,求它们两两相乘再
相加的和
S=a1·a2+a1·a3+·+a1·am+a2·a3+
输入格式
输入的第一行包含一个整数几
第二行包含n个整数a1,a2,··,an*/
//方法合并化解S1=a1(a2+a3+...+an-1)
public class 求和 {
static int N=200010;
static long[]a=new long[N];
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for(int i=1;i<=n;i++) {
a[i]=sc.nextInt();
}
//最终结果
long ans=0;
//记录i-1个数的和
long sum=0;
for(int i=1;i<=n;i++) {
ans+=a[i]*sum;
sum+=a[i];
}
//时间复杂度为O(n)
System.out.print(ans);
}
}

24
求和2.java Normal file
View File

@ -0,0 +1,24 @@
package LanQiaoOJ;
import java.util.Scanner;
//方法暴力破解时间复杂度为O(n^2)
//范围为2e5*2e5=4e10 超时
public class 求和2 {
static int N=200010;
static long[]a=new long[N];
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for(int i=1;i<n;i++) {
a[i]=sc.nextInt();
}
long ans=0;
for(int i=1;i<=n;i++) {
for(int j=i+1;j<=n;j++) {
ans+=a[i]+a[j];
}
}
System.out.println(ans);
}
}

44
求解质因子.java Normal file
View File

@ -0,0 +1,44 @@
package LanQiaoOJ;
import java.util.Scanner;
/*
* 给定一个数字N请你求出它的所有质因子
输入描述
输入仅一行包含为一个整数N
1W10^12*/
public class 求解质因子 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
long n=sc.nextLong();
for(long i=2;i<n/i;i++) {
//判断是否为质因子
if(n%i==0) {
System.out.print(i+" ");
//将n除尽
while(n%i==0)n/=i;
}
}
if(n>1)
System.out.print(n);
}
}
/*此方法蓝桥OJ上无法通过超时暴力破解
* public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
long n=sc.nextLong();
for(long i=2;i<n;i++) {
if(n%i==0&&check(i)) {
System.out.print(i+" ");
}
}
}
static Boolean check(long x) {
for(long i=2;i<=x/i;i++) {
if(x%i==0)
return false;
}
return true;
}*/

40
求阶乘.java Normal file
View File

@ -0,0 +1,40 @@
package LanQiaoOJ;
import java.math.BigInteger;
import java.util.Scanner;
/*
* 问题描述
满足N!的末尾恰好有K个0的最小的N是多
如果这样的N不存在输出一1
输入格式
一个整数K
输出格式
一个整数代表答案*/
public class 求阶乘 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
long k=sc.nextInt();//0的个数
for(long i=2;i<1e18;i++) {
if(Fun(i)==k) {
System.out.print(i);
break;
}else if(Fun(i)>k) {
System.out.print(-1);
return;
}
}
}
public static long Fun(long n) {
long ans=0;
while(n>0) {
//因数中有1个5就有1个0即计算5的个数
ans=ans+n/5;
n=n/5;
}
return ans;
}
}

18
熊怪吃核桃.java Normal file
View File

@ -0,0 +1,18 @@
package LanQiaoOJ;
/*熊怪吃核桃
森林里有一只熊怪很爱吃核桃不过它有个习惯每次都把找到的核桃分成相等的两份
* 吃掉一份留一份如果不能等分熊怪就会扔掉一个核桃再分
* 第二天再继续这个过程直到最后剩一个核桃了直接丢掉
有一天熊怪发现了 1543 个核桃请问它在吃这些核桃的过程中一共要丢掉多少个核桃*/
public class 熊怪吃核桃 {
public static void main(String[] args) {
int count=0;//表示丢掉的核桃数
for(int n=1543;n>0;n/=2) {
if(n%2!=0) {
n--;
count++;
}
}
System.out.println(count);
}
}

20
特殊的数字.java Normal file
View File

@ -0,0 +1,20 @@
package LanQiaoOJ;
/*
* 问题描述
  153是一个非常特殊的数它等于它的每位数字的立方和即153=1*1*1+5*5*5+3*3*3编程求所有满足这种条件的三位十进制数
输出格式
  按从小到大的顺序输出满足条件的三位十进制数每个数占一行
*/
public class 特殊的数字 {
public static void main(String[] args) {
int a,b,c;//表示这个特殊的数的个位十位百位
for(int num=100;num<1000;num++) {
a=num%10;//对10求余得到个位的值
b=num%100/10;//先对100求余再对10取整得到十位数上的值
c=num/100;//对100取整得到百位数上的值
if(num==a*a*a+b*b*b+c*c*c) {
System.out.print(num+" ");
}
}
}
}

View File

@ -0,0 +1,49 @@
package LanQiaoOJ;
import java.util.HashMap;
import java.util.Scanner;
import java.util.Map;
/*用杂志拼接信件
*
* 杂志和信件均由字符串构成对于给定的杂志和信件确定信件是否可以由杂志上的字符构成
例如杂志为 ab信件为 aa则不能构成杂志为 aab信件为 aa则可以构成
输入描述
输入两行字符串长度均不超过 100
第一行为杂志字符串第二行为信件字符串
输出描述
输出一行若信件可由杂志构成则输出 YES否则输出 NO
示例
输入
ab
aa
输出
NO */
public class 用杂志拼接信件 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String s=sc.next(); //杂志
String t=sc.next(); //信件
Map<Character,Integer>ms=new HashMap<>();
Map<Character,Integer>mt=new HashMap<>();
for(int i=0;i<s.length();i++) {
char c=s.charAt(i);
ms.put(c,ms.getOrDefault(c, 0)+1);
}
for(int i=0;i<s.length();i++) {
char c=s.charAt(i);
mt.put(c, mt.getOrDefault(c,0)+1);
}
for(char i='a';i<'z';i++) {
if(ms.getOrDefault(i, 0)<mt.getOrDefault(i, 0)) {
System.out.print("NO");
return;
}
System.out.print("YES");
}
}
}

View File

@ -0,0 +1,32 @@
package LanQiaoOJ;
import java.util.Scanner;
public class 用杂志拼接信件2 {
static int[] ms=new int[26],mt=new int [26];
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
//杂志
String s=sc.next();
//信件
String t=sc.next();
for(int i=0;i<s.length();i++) {
char c=s.charAt(i);
//统计字符个数
ms[c-'a']++;
}
for(int i=0;i<t.length();i++) {
char c=t.charAt(i);
mt[c-'a']++;
}
for(int i=0;i<26;i++) {
if(ms[i]<mt[i]) {
System.out.println("NO");
return;
}
System.out.print("YES");
}
}
}

View File

@ -0,0 +1,23 @@
package LanQiaoOJ;
import java.util.Scanner;
public class È·¨Ò»¸öÊýÊÇ·ñΪ2µÄÃÝ {
public static void main(String[] args) {
/*System.out.println(Integer.toString(2,2));
System.out.println(Integer.toString(4,2));
System.out.println(Integer.toString(6,2));
System.out.println(Integer.toString(8,2));
System.out.println(Integer.toString(16,2));
System.out.println(Integer.toString(32,2));*/
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
if(n==1) {
System.out.print("NO");
return;
}
System.out.print(Integer.bitCount(n)==1?"YES":"NO");
}
}

25
积分之谜.java Normal file
View File

@ -0,0 +1,25 @@
package LanQiaoOJ;
/*积分之谜
* 题目描述
本题为填空题只需要算出结果后在代码中使用输出语句将所填结果输出即可
小明开了个网上商店卖风铃共有 3个品牌ABC 为了促销每件商品都会返固定的积分
小明开业第一天收到了三笔订单
第一笔3 A +7个B +1个C共返积分315
第二笔4 A +10个B+1个 C共返积分420
第三笔A + B + C共返积分 ........
你能算出第三笔订单需要返积分多少吗*/
public class 积分之谜 {
public static void main(String[] args) {
int a,b,c;//分别表示A B C三个品牌返回的固定积分
for(a=1;a<420;a++) {
for (b = 1; b<420; b++) {
for (c = 1; c<420; c++) {
if (3 * a + 7 * b + c == 315 && 4 * a + 10 * b + c == 420) {
System.out.println(a+b+c);
return ;
}
}
}
}
}
}

15
空间.java Normal file
View File

@ -0,0 +1,15 @@
package LanQiaoOJ;
/*
* 小蓝准备用256MB的内存空间开一个数组数组的每个元
素都是32位二进制整数如果不考虑程序占用的空间和维护
内存需要的辅助空间请问256MB的空间可以存储多少个
32位二进制整数*/
public class 空间 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(256*1024*1024/4);
System.out.println(Math.abs(256*1024*1024*8/32));
}
}

43
等差数列.java Normal file
View File

@ -0,0 +1,43 @@
package LanQiaoOJ;
import java.util.Arrays;
import java.util.Scanner;
/*
* 题目描述
数学老师给小明出了一道等差数列求和的题目
是粗心的小明忘记了一部分的数列只记得其中N个整数现在给出这N个整数小明想知道包含这N个整
数的最短的等差数列有几项
输入描述
输入的第一行包含一个整数N第二行包含N个整数A1,A2,··,AN(注意A1~AN并不一定是按等差数列中的顺序给出)
其中2N10^5,0A:10^9
输出描述
输出一个整数表示答案*/
public class 等差数列 {
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<n;i++) {
a[i]=sc.nextInt();
}
Arrays.sort(a);
//最小公差
int d=a[1]-a[0];
for(int i=1;i<n;i++) {
d=gcd(d,a[i]-a[i-1]);
}
//判断公差为0的情况
if(d==0)
System.out.print(n);
else
//计算项数
System.out.print((a[n-1]-a[0])/d+1);
}
//判断最大的公差
static int gcd(int a, int b) {
return b==0?a:gcd(b,a%b);
}
}

26
约数.java Normal file
View File

@ -0,0 +1,26 @@
package LanQiaoOJ;
/*约数
* 题目描述
本题为填空题只需要算出结果后在代码中使用输出语句将所填结果输出即可
如果整数 a是整数 b的整数倍则称 b是 a的约数
请问有多少个正整数是 2020的约数*/
public class 约数 {
public static void main(String[] args) {
int count=0;//表示2020的约数的个数
for(int a=1;a<=2020;a++) {
if(2020%a==0) {
count++;
}
}
System.out.println(count);
}
}
/*
* 法二
* int a=1;
* while(a<=2020){
if(2020%a==0)
count++;
a++;
}
*/

59
货物摆放.java Normal file
View File

@ -0,0 +1,59 @@
package LanQiaoOJ;
import java.util.ArrayList;
/*
* 小蓝有一个超大的仓库可以摆放很多货物
现在小蓝有箱货物要摆放在仓库每箱货物都是规则
的正方体小蓝规定了长高三个互相垂直的方向
箱货物的边都必须严格平行于长
小蓝希望所有的货物最终摆成一个大的长方体即在长
高的方向上分别堆LWH的货物满足n=L×WxH
给定请问有多少种堆放货物的方案满足要求
例如=4时有以下6种方案1×1×41×2×21×4×12×1×22×2×14×1×1
请问当m=2021041820210418(注意有16位数字)总共有多少种方案
*/
public class 货物摆放 {
public static void main(String[] args) {
int count=0;
long num=2021041820210418l;
//按此算法时间复杂度非常大短时间内无法出结果
// long l,w,h;
// for(l=0;l<=n;l++) {
// for(w=0;w<=n;w++) {
// for(h=0;h<=n;h++) {
// if(n==l*h*w) {
// count++;
// }
// }
// }
// }
// System.out.println(count);
// }
//声明一个ArrayList动态数组
ArrayList<Long> arr=new ArrayList<>();
//遍历求出num的因子对num开平方根以减少运算量
for(long i=1;i<Math.sqrt(num);i++) {
if(num%i==0) {
//将num的因子放入数组中
arr.add(i);
//在num能被i整除情况下再求出num的另一个因子
long n=num/i;
//如果num = Math.sqrt(num)*Math.sqrt(num),那么由较小的因子求较大的因子时会重复要排除这种情况
//当然此时num不会出现这种情况如果num=4就会出现这种情况
if(n!=i)
arr.add(n);
}
}
for(long l:arr) {
for(long h:arr) {
for(long w:arr) {
if(num==l*h*w)
count++;
}
}
}
System.out.println(count);
}
}

33
质因数个数.java Normal file
View File

@ -0,0 +1,33 @@
package LanQiaoOJ;
import java.util.Scanner;
/*
* 问题描述
给定正整数几请问有多少个质数是几的约数
输入格式
输入的第一行包含一个整数几
输出格式
输出一个整数表示的质数约数个数*/
public class 质因数个数 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
long n=sc.nextLong();
int count=0;
for(long i=2;i<n;i++) {
if(n%i==0&&check(i)) {
count++;
}
}
System.out.print(count);
}
static Boolean check(long x) {
for(long i=2;i<=x/i;i++) {
if(x%i==0)
return false;
}
return true;
}
}

32
质因数个数2.java Normal file
View File

@ -0,0 +1,32 @@
package LanQiaoOJ;
import java.util.Scanner;
//算术基本定理又称为正整数的唯一分解定理
//每个大于1的自然数若不是本身就是质数就是可写为2个以上的质数的积
public class 质因数个数2 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
long n=sc.nextLong();
int count=0;
//不需要遍历到n任何一个数的质因数的质因子大于根号n的要么没有要么只有1个
for(long i=2;i<n/i;i++) {
if(n%i==0) {
count++;
int ans=0;
//用来求系数
while(n%i==0) {
ans++;
n/=i;
}
System.out.println(i+" "+ans);
}
}
if(n>1) {
System.out.println(n+" "+1);
count++;
}
System.out.println(count);
}
}

46
跑步锻炼.java Normal file
View File

@ -0,0 +1,46 @@
package LanQiaoOJ;
/*
* 小蓝每天都锻炼身体
正常情况下小蓝每天跑1干米如果某天是周一或者月初(1日)为了激励自己小蓝要跑2干米如果同时是周一
或月初小蓝也是跑2干米小蓝跑步已经坚持了很长时间从2000年1月1日周六()到2020年10月1日周四)
请问这段时间小蓝总共跑步多少干米*/
public class 跑步锻炼 {
//每月天数
static int []w= {0,31,28,31,30,31,30,31,31,30,31,30,31};
//定义年月日
//t=1表示星期一t=0表示星期天
static int y=2000,m=1,d=1,t=6;
static int count=0;
public static void main(String[] args) {
// TODO Auto-generated method stub
while(y!=2020||m!=10||d!=1){
if(y%400==0||y/400==0&&y/100!=0)
w[2]=29;
else
w[2]=28;
if(d==1||t==1) {
count+=2;
}
else {
count++;
}
d++;
t++;
t%=7;
if(d>w[m]) {
m++;
d=1;
}
if(m>12) {
y++;
m=1;
}
if(y==2020&&m==10&&d==1) {
count+=2;
}
}
System.out.print(count);
}
}

23
门牌制作.java Normal file
View File

@ -0,0 +1,23 @@
package LanQiaoOJ;
/*
* 小蓝要为一条街的住户制作门牌号
这条街一共有 2020 位住户门牌号从 1 2020 编号
小蓝制作门牌的方法是先制作 0 9 这几个数字字符最后根据需要将字符粘贴到门牌上
例如门牌 1017 需要依次粘贴字符1017即需要
1 个字符 02 个字符 11 个字符 7
请问要制作所有的 1 2020 号门牌总共需要多少个字符 2*/
public class 门牌制作 {
public static void main(String[] args) {
int count=0;
for(int i=1;i<=2020;i++) {
String numStr=Integer.toString(i);
for(int j=0;j<numStr.length();j++) {
if(numStr.charAt(j)=='2')
count++;
}
}
System.out.print(count);
}
}

17
门牌制作2.java Normal file
View File

@ -0,0 +1,17 @@
package LanQiaoOJ;
public class ÃÅÅÆÖÆ×÷2 {
public static void main(String [] args) {
int count=0;
for(int i=1;i<=2020;i++) {
int x=i;
while(x>0) {
if(x%10==2) {
count++;
}
x/=10;
}
}
System.out.print(count);
}
}