蓝桥杯练习生第四天
小蓝每天都锻炼身体。
正常情况下,小蓝每天跑 11 千米。如果某天是周一或者月初(11 日),为了激励自己,小蓝要跑 22 千米。如果同时是周一或月初,小蓝也是跑 22 千米。
小蓝跑步已经坚持了很长时间,从 2000年 11 月 11 日周六(含)到 2020年 1010 月 11 日周四(含)。请问这段时间小蓝总共跑步多少千米?
思路:看判断闰年还是平年,天数超过当月天数就要重置天数,月份加一,如果月份大于12,就要重置月份,年份加一,如果周数大于7,就要重置周几,最后把 2020年 1010 月 11 日带入。
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
// 定义起始和结束日期
int[] month={0,31,28,31,30,31,30,31,31,30,31,30,31};
int year=2000;
int day=1;
int week=6;
int mon=1;
int km=0;
while(true){
if(year%4==0&&year%100!=0||year%400==0){
month[2]=29;
}else{
month[2]=28;
}
if(day == 1 || week== 1){
km+=2;
} else{
km+=1;
}
day++;
week++;
if(day>month[mon]){
day=1;
mon++;
}
if(mon>12){
mon=1;
year++;
}
if(week>7){
week=week%7;
}
if(year==2020&&mon==10&&day==1){
km+=2;
break;
}
}
System.out.println(km);
}
}
小明刚刚找到工作,老板人很好,只是老板夫人很爱购物。老板忙的时候经常让小明帮忙到商场代为购物。小明很厌烦,但又不好推辞。
这不,大促销又来了!老板夫人开出了长长的购物单,都是有打折优惠的。
小明也有个怪癖,不到万不得已,从不刷卡,直接现金搞定。
现在小明很心烦,请你帮他计算一下,需要从取款机上取多少现金,才能搞定这次购物。
取款机只能提供 100 元面额的纸币。小明想尽可能少取些现金,够用就行了。 你的任务是计算出,小明最少需要取多少现金。
以下是让人头疼的购物单,为了保护隐私,物品名称被隐藏了。
**** 180.90 88折
**** 10.25 65折
**** 56.14 9折
**** 104.65 9折
**** 100.30 88折
**** 297.15 半价
**** 26.75 65折
**** 130.62 半价
**** 240.28 58折
**** 270.62 8折
**** 115.87 88折
**** 247.34 95折
**** 73.21 9折
**** 101.00 半价
**** 79.54 半价
**** 278.44 7折
**** 199.26 半价
**** 12.97 9折
**** 166.30 78折
**** 125.50 58折
**** 84.98 9折
**** 113.35 68折
**** 166.57 半价
**** 42.56 9折
**** 81.90 95折
**** 131.78 8折
**** 255.89 78折
**** 109.17 9折
**** 146.69 68折
**** 139.33 65折
**** 141.16 78折
**** 154.74 8折
**** 59.42 8折
**** 85.44 68折
**** 293.70 88折
**** 261.79 65折
**** 11.30 88折
**** 268.27 58折
**** 128.29 88折
**** 251.03 8折
**** 208.39 75折
**** 128.88 75折
**** 62.06 9折
**** 225.87 75折
**** 12.89 75折
**** 34.28 75折
**** 62.16 58折
**** 129.12 半价
**** 218.37 半价
**** 289.69 8折
思路:用excel做或者暴力求解。
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
double sum = 180.90*0.88+10.25*0.65+56.14*0.9+104.65*0.9+100.30*0.88+297.15*0.5+26.75*0.65+130.62*0.5+240.28*0.58+270.62*0.8+115.87*0.88+247.34*0.95+73.21*0.9+101.00*0.5+79.54*0.5+278.44*0.7+199.26*0.5+12.97*0.9+166.30*0.78+125.50*0.58+84.98*0.9+113.35*0.68+166.57*0.5+42.56*0.9+81.90*0.95+131.78*0.8+255.89*0.78+109.17*0.9+146.69*0.68+139.33*0.65+141.16*0.78+154.74*0.8+59.42*0.8+85.44*0.68+293.70*0.88+261.79*0.65+11.30*0.88+268.27*0.58+128.29*0.88+251.03*0.8+208.39*0.75+128.88*0.75+62.06*0.9+225.87*0.75+12.89*0.75+34.28*0.75+62.16*0.58+129.12*0.5+218.37*0.5+289.69*0.8;
double a=sum%100;
double b=sum-a;
int c=(int)b+100;
System.out.println(c);
}
}
如下图所示,小明用从 11 开始的正整数“蛇形”填充无限大的矩阵。
1 2 6 7 15 ...
3 5 8 14 ...
4 9 13 ...
10 12 ...
11 ...
...
容易看出矩阵第二行第二列中的数是 55。请你计算矩阵中第 2020 行第 2020 列的数是多少?
思路:斜着看,永远是前一行本身+4*行数或者前一行数字平方+现在一行数字平方
mport java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
int a=1;
for(int i=0;i<=19;i++){
a=a+4*i;
}
System.out.println(a);
}
}
小蓝有一个超大的仓库,可以摆放很多货物。
现在,小蓝有 nn 箱货物要摆放在仓库,每箱货物都是规则的正方体。小蓝规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、宽、高。
小蓝希望所有的货物最终摆成一个大的长方体。即在长、宽、高的方向上分别堆 LL、WW、HH 的货物,满足 n=L×W×Hn=L×W×H。
给定 nn,请问有多少种堆放货物的方案满足要求。
例如,当 n=4n=4 时,有以下 66 种方案:1×1×4、1×2×2、1×4×1、2×1×2、2×2×1、4×1×11×1×4、1×2×2、1×4×1、2×1×2、2×2×1、4×1×1。
请问,当 n=2021041820210418(注意有 16 位数字)时,总共有多少种方案?
提示:建议使用计算机编程解决问题。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
思路:定义一个ArrayList数组,存放num的因子
/从1开始遍历,遍历到num的平方根结束。不需要把num遍历一遍,这样算法复杂都也非常大,重点看for循环里面的语句
如果能被整除,就放到arr数组中
当i能被num整除的情况下,求出num关于i的另外一个除数n //这样,for循环不需要从1遍历到num。可以通过较小的因子,求出另外一个较大的因子
如果num = Math.sqrt(num)*Math.sqrt(num),那么由较小的因子求较大的因子时,会重复,要排除这种情况
最后三层for循环依次遍历即可。
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
int count=0;
long n=2021041820210418l;
ArrayList<Long> list=new ArrayList<>();
for(long i=1;i<Math.sqrt(n);i++){
if(n%i==0){
list.add(i);
long a=n/i;
if(a!=i){
list.add(a);
}
}
}
for(long i:list){
for(long j:list){
for(long k:list){
if(i*j*k==n){
count++;
}
}
}
}
System.out.println(count);
}
}