目录
一、神奇算式 精选项目课程_IT热门课程_蓝桥云课课程 - 蓝桥云课
1.讲解
2.代码
二、缩位求和 精选项目课程_IT热门课程_蓝桥云课课程 - 蓝桥云课
1.讲解
2.代码
三、积木大赛 https://www.lanqiao.cn/problems/384/learning/
1.讲解
方案一:
方案二:
2.代码
方案一:
方案二:
一、神奇算式
1.讲解
这题呢,可以暴搜,两数相乘,我们只要让前面的数字比后面的数字小,那么就不会出现重复项,同时满足相乘大于1000且小于10000,并且每个数字不重复,且结果使用数字和计算数字相同;当然,也可以分类讨论,第一种是一位数*三位数,第二种是2位数*2位数,第二种写法累一些。
2.代码
用的是第二种方法:
public class 神奇算式 {
public static void main(String[] args) {
int [][][]brr=new int[99][1000][10];
int s=0,y;
for (int i=2;i<99;i++){
if (i<10){
for (int j=999;j>=1000/i;j--){
y=i*j;
if (y<1000||y>=10000){
break;
}
brr[i][j][i]++;
brr[i][j][j % 10]++;
brr[i][j][(j / 10) % 10]++;
brr[i][j][(j / 100)]++;
if (brr[i][j][i] != 2 && brr[i][j][j % 10] != 2 && brr[i][j][(j / 10) % 10] != 2) {
s = getS(brr, s, y, i, j);
}
}
}else{
for (int j=99;j>=1000/i&&j>i;j--){
y=i*j;
if (y<1000||y>=10000){
break;
}
brr[i][j][i % 10]++;
brr[i][j][j % 10]++;
brr[i][j][j / 10]++;
brr[i][j][(i / 10)]++;
if (brr[i][j][i % 10] != 2 && brr[i][j][j % 10] != 2 && brr[i][j][j / 10] != 2) {
s = getS(brr, s, y, i, j);
}
}
}
}
System.out.println(s);
}
private static int getS(int[][][] brr, int s, int y, int i, int j) {
while (y > 0) {
brr[i][j][y % 10]--;
y /= 10;
}
for (int z = 0; z < 10; z++) {
if (brr[i][j][z] != 0) {
break;
} else if (z == 9) {
s++;
}
}
return s;
}
}
二、缩位求和 1.讲解
这题的注重点是你第一次输入后,求出初始值后直接可以用int表示;
将所有数相加后,用while计算和是否小于10即可;
2.代码代码如下:
Scanner sc = new Scanner(System.in);
String st=sc.next();
int m=st.length();//长度
int s=0;//存放第一次求和后的值
for (int i=0;i
三、积木大赛
1.讲解
方案一:
寻找连续上升段和连续下降的段,然后求其中的解
比如:3 5 8 4 1 6 9 2 5
那么连续段的最小最大:3 8 1 9 2 5
然后 从第一个开始,判断后面的值是否比该值小,比该值小就替换
所以 开始进行3此操作,得到的结果是 0 5 0 8 1 4
然后 进行5 此 0 0 0 8 1 4
进行8次 0 0 0 0 0 3
最后进行3次,完成结果
3+5+8+3=19次
当然,这个方案是适用找不到更加方便的解的时候使用的;
方案二:
每一个后面的值比前面一个值大是,增加相应的操作次数 还是上面的例子:
比如:3 5 8 4 1 6 9 2 5
那么我们设置数组时,前置一个0则为
arr=0 3 5 8 4 1 6 9 2 5;
从arr1开始,每一个数都是和前面一个数比较
3>0,所以增加3-0次
5>3,增加5-3次
8>5,增加8-5次
4<8,1<4,这俩不变
6>1,增加6-1次
9>6增加9-6次
2<9不变
5>2,增加5-2次
总次数:3+2+3+5+3+3=19次
2.代码
方案一:
import java.util.Scanner;
public class 积木大赛 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int []arr=new int[n];
int []brr=new int[n];
int count=1;
long sum=0;
arr[0]=sc.nextInt();
brr[0]=arr[0];
if (n==1){
System.out.println(arr[0]);
return;
}else if (n==2){
arr[1]=sc.nextInt();
System.out.println(Math.max(arr[0],arr[1]));
return;
}
arr[1]=sc.nextInt();
int y=1;
for (int i=2;iarr[i-1]&&arr[i-1]
方案二:
import java.io.*;
public class 积木大赛 {
static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
static StreamTokenizer st=new StreamTokenizer(br);
public static void main(String[] args) throws Exception{
int n=nextInt();
int []arr=new int[n+1];
for (int i=1;i<=n;i++){
arr[i]=nextInt();
}
int a=arr[0];
for (int i=1;i<=n;i++){
if (arr[i]>arr[i-1])
a+=(arr[i]-arr[i-1]);
}
System.out.println(a);
}
public static int nextInt() throws Exception {
st.nextToken();
return (int) st.nval;
}
}



