2021-07-28刷的算法题
Posted 可持续化发展
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-07-28刷的算法题相关的知识,希望对你有一定的参考价值。
输入描述:
输入一个整数(int类型)
输出描述:
这个数转换成2进制后,输出1的个数
示例1
输入:
5
复制
输出:
2
import java.util.Scanner;
public class Main{
public static void main(String[] args){
int num = new Scanner(System.in).nextInt();
int sum = 1;
//十进制转二进制,就是这个数一直除以2,余数从下往上写。
while(num != 1){
if(num%2 == 1){
sum++;
}
num /= 2;
}
System.out.println(sum);
}
}
HJ1 字符串最后一个单词的长度
描述
计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。
输入描述:
输入一行,代表要计算的字符串,非空,长度小于5000。
输出描述:
输出一个整数,表示输入字符串最后一个单词的长度。
示例1
输入:
hello nowcoder
复制
输出:
8
复制
说明:
最后一个单词为nowcoder,长度为8
import java.util.*;
public class Main {
public static void main(String[] args) {
String[] strs = new Scanner(System.in).nextLine().split(" ");
System.out.println(strs[strs.length - 1].length());
}
}
HJ2 计算某字母出现次数
描述
写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字母,然后输出输入字符串中该字母的出现次数。不区分大小写,字符串长度小于500。
输入描述:
第一行输入一个由字母和数字以及空格组成的字符串,第二行输入一个字母。
输出描述:
输出输入字符串中含有该字符的个数。
示例1
输入:
ABCabc
A
复制
输出:
2
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.nextLine().toLowerCase();
char target = in.nextLine().toLowerCase().toCharArray()[0];
int count = 0;
char[] charArr = str.toCharArray();
for(int i = 0; i < charArr.length; i++) {
if(target == charArr[i]) {
count++;
}
}
System.out.println(count);
}
}
HJ3 明明的随机数
描述
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据(用于不同的调查),希望大家能正确处理)。
注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。
当没有新的输入时,说明输入结束。
输入描述:
注意:输入可能有多组数据(用于不同的调查)。每组数据都包括多行,第一行先输入随机整数的个数N,接下来的N行再输入相应个数的整数。具体格式请看下面的"示例"。
输出描述:
返回多行,处理后的结果
示例1
输入:
3
2
2
1
11
10
20
40
32
67
40
20
89
300
400
15
复制
输出:
1
2
10
15
20
32
40
67
89
300
400
复制
说明:
输入解释:
第一个数字是3,也即这个小样例的N=3,说明用计算机生成了3个1到1000之间的随机整数,接下来每行一个随机数字,共3行,也即这3个随机数字为:
2
1
1
所以第一个小样例的输出为:
1
2
第二个小样例的第一个数字为11,也即…(类似上面的解释)…
所以第二个小样例的输出为:
10
15
20
32
40
67
89
300
400
所以示例1包含了两个小样例!!
import java.util.*;
public class Main{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
while(sc.hasNextInt())
{
//一个用例打印完后,新创建一个TreeSet,来清空数据。
Set<Integer> ts = new TreeSet<Integer>();
int N=sc.nextInt();
for(int i=0;i<N;i++)
ts.add(sc.nextInt());
// for(int i:ts)
// System.out.println(i);
Iterator<Integer> it=ts.iterator();
while(it.hasNext())
System.out.println(it.next());
}
sc.close();
}
}
HJ4 字符串分隔
描述
•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
输入描述:
连续输入字符串(输入多次,每个字符串长度小于100)
输出描述:
输出到长度为8的新字符串数组
示例1
输入:
abc
123456789
复制
输出:
abc00000
12345678
90000000
HJ4 字符串分隔
描述
•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
输入描述:
连续输入字符串(输入多次,每个字符串长度小于100)
输出描述:
输出到长度为8的新字符串数组
示例1
输入:
abc
123456789
复制
输出:
abc00000
12345678
90000000
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
//妙啊!先补8个0,这样的话,我8个8个的划分,
//有多少组8个,就打印多少行
String strs = scanner.nextLine() + "00000000";
for (int i = 8; i < strs.length(); i += 8) {
System.out.println(strs.substring(i - 8, i));
}
}
}
}
HJ17 坐标移动
描述
开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。
输入:
合法坐标为A(或者D或者W或者S) + 数字(两位以内)
坐标之间以;分隔。
非法坐标点需要进行丢弃。如AA10; A1A; % ; YAD; 等。
下面是一个简单的例子 如:
A10;S20;W10;D30;X;A1A;B10A11;;A10;
处理过程:
起点(0,0)
-
A10 = (-10,0)
-
S20 = (-10,-20)
-
W10 = (-10,-10)
-
D30 = (20,-10)
-
x = 无效
-
A1A = 无效
-
B10A11 = 无效
-
一个空 不影响
-
A10 = (10,-10)
结果 (10, -10)
注意请处理多组输入输出
输入描述:
一行字符串
输出描述:
最终坐标,以逗号分隔
示例1
输入:
A10;S20;W10;D30;X;A1A;B10A11;;A10;
复制
输出:
10,-10
import java.util.Scanner;
import java.util.Arrays;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String str = sc.nextLine().toUpperCase();
String[] strs = str.split(";");
int[] zb = {0, 0};
for(String s : strs){
//核心就是正则表达式的运用
if(s.matches("[ADWS]\\\\d{1,2}")){
int num = Integer.valueOf(s.substring(1));
if(s.charAt(0) == 'A'){
zb[0] -= num;
}else if(s.charAt(0) == 'W'){
zb[1] += num;
}else if(s.charAt(0) == 'S'){
zb[1] -= num;
}else if(s.charAt(0) == 'D'){
zb[0] += num;
}
}
}
System.out.println(zb[0] + "," + zb[1]);
}
}
}
HJ37 统计每个月兔子的总数
描述
有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多少?
本题有多组数据。
输入描述:
输入int型表示month
输出描述:
输出兔子总数int型
示例1
输入:
9
复制
输出:
34
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNextInt()){
int n = in.nextInt();
int F1 = 1,F2 = 1;
//求第n个月,i到第n-1个月再执行一次结束
//斐波那契数列,取的是数列规律那两个数中的前面一个。
for(int i = 1;i < n;i++){
int temp = F1 + F2;
F1 = F2;
F2 = temp;
// System.out.println("第"+i+"个月"+ " "+F1);
}
System.out.println(F1);
// System.out.println(F2);
}
}
}
以上是关于2021-07-28刷的算法题的主要内容,如果未能解决你的问题,请参考以下文章