赞
踩
目录
问题描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
已知今天是星期六,请问 20^{22} 天后是星期几?
注意用数字 11 到 77 表示星期一到星期日。
运行限制
- 最大运行时间:1s
- 最大运行内存: 512M
题目分析:
因为20^22次方实在太大,long也存放不下,所以采用边相乘边取模的方式运算
代码:
- public class Test01 {
- public static void main(String[] args) {
- int day = 6;
- int res = 1;
- for (int i = 0; i < 22; i++) {
- res = 20*res %7;
- }
- res += day;
- if(res > 7){
- res -= 7;
- }
- System.out.println(res);
- }
- }
所以最终的答案为7
问题描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
这天小明正在学数数。
他突然发现有些止整数的形状像一挫 “山”, 比㓚 123565321 、 145541123565321、145541, 它 们左右对称 (回文) 且数位上的数字先单调不减, 后单调不增。
小朋数了衣久也没有数完, 他惒让你告诉他在区间 [2022, 2022222022][2022,2022222022] 中有 多少个数的形状像一座 “山”。
运行限制
- 最大运行时间:1s
- 最大运行内存: 512M
题目分析:因为此题是填空题,所以就采用最原始的办法,暴力求解,注意题目中的两个要求,
1.此数是回文数 2.此数先单调不减,后单调不增 ,可以转成字符串来计算相对简单一点
代码:
- public class Test02 {
- public static void main(String[] args) {
- //count用来计数
- int count = 0;
- //循环遍历所有数字
- for (int i = 2022; i < 2022222022; i++) {
- if(palindrome(i) && increasing(i)){
- count++;
- }
- }
- System.out.println(count);
- }
-
- //判断单调的方法
- public static boolean increasing(int num){
- //转成字符串类型
- String str = String.valueOf(num);
- //只需判断前半部分单调不减即可
- for (int i = 0; i < (str.length()-1)/2; i++) {
- if(str.charAt(i) > str.charAt(i+1)){
- return false;
- }
- }
- return true;
- }
-
- //判断回文的方法
- public static boolean palindrome(int num){
- //转成字符串类型
- String str = String.valueOf(num);
- //判断左右两边是否对称
- for (int i = 0; i < str.length()/2; i++) {
- if(str.charAt(i) != str.charAt(str.length()-i-1)){
- return false;
- }
- }
- return true;
- }
- }
答案为:3138
问题描述
给定一个只包含大写字母的字符串 SS, 请你输出其中出现次数最多的字符。
如果有多个字母均出现了最多次, 按字母表顺序依次输出所有这些字母。
输入格式
一个只包含大写字母的字符串 SS.
输出格式
若干个大写字母,代表答案。
样例输入
BABBACAC
样例输出
AB
评测用例规模与约定
对于 100% 的评测用例, 1≤∣S∣≤10^6.
运行限制
- 最大运行时间:1s
- 最大运行内存: 512M
题目分析:
此题需要输出出现最多的字符,创建一个新数组对字符串内的字符进行计数,遍历第一遍找到最大值,遍历第二遍按顺序输出最大值对应的字符
代码:
- import java.util.Scanner;
-
- public class Test03 {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- String str = sc.next();
- int [] arr = new int[26];
- for (int i = 0; i < str.length(); i++) {
- int num = str.charAt(i) - 65;
- arr[num]++;
- }
- int max = 0;
- for (int i = 0; i < arr.length; i++) {
- if(arr[i] > max){
- max = arr[i];
- }
- }
- for (int i = 0; i < arr.length; i++) {
- if(arr[i] == max) {
- System.out.print((char)(i+65));
- }
- }
- }
- }
问题描述
小蓝老师教的编程课有 N 名学生, 编号依次是 1 …N 。第 i 号学生这学期 刷题的数量是 Ai 。
对于每一名学生, 请你计算他至少还要再刷多少道题, 才能使得全班刷题 比他多的学生数不超过刷题比他少的学生数。
输入格式
第一行包含一个正整数 N 。
第二行包含 N 个整数: A1,A2,A3,…,AN.
输出格式
输出 N 个整数, 依次表示第 1…N 号学生分别至少还要再刷多少道题。
样例输入
5 12 10 15 20 6
样例输出
0 3 0 0 7
评测用例规模与约定
对于 30 \%30% 的数据, 1≤N≤1000,0≤Ai≤1000.
对于 100 \%100% 的数据, 1≤N≤100000,0≤Ai≤100000.
运行限制
- 最大运行时间:1s
- 最大运行内存: 512M
题目分析:首先我们需要找到这N位同学刷题数的中位数,如果是奇数位同学则正好在正中间,如果是偶数位同学,则找中间偏大的数值,将其赋值给media,然后我们将比media大的值和比media小的值分别进行统计big和small,在此需要进行判断,如果big>= small,则做题比中值小的同学最终做题数必须再+1才符合题目要求,如果big>small时,做题数目和中值相等的需要多做一道题方可符合题目要求。对数组内的值进行一一判断后输出相应的结果。
代码:
- import java.util.Arrays;
- import java.util.Scanner;
-
- public class Main {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int n = sc.nextInt();
- //创建一个新数组存放数据
- int [] nums = new int[n];
- for (int i = 0; i < n; i++) {
- nums[i] = sc.nextInt();
- }
- //复制该数组对其排序找到中值
- int [] numsCopy = Arrays.copyOf(nums,n);
- Arrays.sort(numsCopy);
- int media = numsCopy[n/2];
- //对比中值大和小的值进行计数
- int big = 0;
- int small= 0;
- for (int i = 0; i < n; i++) {
- if(nums[i] > media){
- big++;
- }else if(nums[i] < media){
- small++;
- }
- }
- //判断big和small的大小
- //特殊情况加1,默认不加
- int flag = 0;
- if(big >= small){
- flag = 1;
- }
- int mid = 0;
- if(big> small){
- mid = 1;
- }
- for (int i = 0; i < n; i++) {
- if(nums[i] < media){
- System.out.print(media-nums[i]+flag+" ");
- }else if(nums[i] == media) {
- System.out.print(mid+" ");
- }else {
- System.out.print(0+" ");
- }
- }
- }
- }
问题描述
满足 N! 的末尾恰好有 K 个 0 的最小的 N 是多少?
如果这样的 N 不存在输出 −1 。
输入格式
一个整数 K 。
输出格式
一个整数代表答案。
样例输入
2
样例输出
10
评测用例规模与约定
对于 30% 的数据, 1≤K≤10e6.
对于 100% 的数据,1≤K≤10e18.
运行限制
- 最大运行时间:3s
- 最大运行内存: 512M
题目分析:
末尾有0需要2和5相乘而得到,而2这个因子远远多于5,所以我们只需要计算5这个因子的个数即可得知阶乘末尾0的个数,例如5有一个,10有一个,25则有两个,125则有三个
已知数据范围的情况下,是用二分法快速锁定答案,若存在则输出最小值,否则输出-1即可
代码:
- import java.util.Scanner;
-
- public class Main {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- long n = sc.nextLong();
- //用二分法找到符合要求的最小值
- long left = 1;
- long right = (long) 9e18;
- //写一个判断某个数的阶乘的零的个数的方法
- //判断循环条件
- long mid = 0;
- while(left < right){
- mid = (right+left)/2;
- if(sumOfZero(mid) >= n){
- right = mid;
- }else {
- left = mid+1;
- }
- }
- if(sumOfZero(left) == n){
- System.out.println(left);
- }else {
- System.out.println(-1);
- }
- }
-
- //判断某个数的阶乘的零的个数的方法
- public static long sumOfZero(long num){
- long sum = 0;
- while(num > 0){
- sum += num/5;
- num /= 5;
- }
- return sum;
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。