蓝桥杯第一次模拟赛JAVA题解
Posted 小羊不会飞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯第一次模拟赛JAVA题解相关的知识,希望对你有一定的参考价值。
目录
第一题🎈
class D1
void method()
int a=0;
for(int i=10000;i<=90000;i++)
if(i%128==0)a++;
System.out.println(a);
625
第一题没啥难度,直接白给
第二题🎈
class D2
void method()
int a=0;
for(int i=1000;i<=9999;i++)
char[] c=Integer.toString(i).toCharArray();
if(c[0]==c[2]&&(c[3]-c[1]==1))a++;
System.out.println(a);
81
这个题目呢,会用toStrng()和toCharArray()就变得很简单
注意一点:
个位的数组下标是3,百位数组下标是1(数组下标从左往右数,个十百千位从右往左数)
第三题🎈
3628800
这个题目是白给题,纯粹排列组合计数,1-21中10个偶数,即10!
第四题🎈
5
这个题目因为台阶数值给定并且比较小,可以直接在草稿纸上写,1到5到5到4到-1到-9是得分为最大值的走法,没有什么难度
第五题🎈
class D5
void method()
Scanner in = new Scanner(System.in);
int a[] = new int[20];
for (int i = 0; i < 20; i++)
a[i] = in.nextInt();
int t = 0;
for (int m = 0; m < 20; m++)
for (int n = m + 1; n < 20; n++)
for (int k = n + 1; k < 20; k++)
if (a[m] < a[n] && a[n] < a[k])
t++;
System.out.println(t);
565
数值范围比较小,可以直接三重循环暴力解
第六题🎈
看到这个题目的时候,人都傻掉了.....(小声bb:这不是小学数学题吗?)
第七题🎈
这个拿纸画一下就OK,当n*m为奇数时,输出的数为(n*m)/2 +1,偶数时为(m*n)/2
注意一点,要用long来定义一下输出的数,防止溢出(题目末尾有一个测评范围)
第八题🎈
class test8
void method()
Scanner scanner = new Scanner(System.in);
int l=scanner.nextInt();
int k=scanner.nextInt();
int n=scanner.nextInt();
int ans=0;
int []a=new int[100010];
a[0]=0;
a[n+1]=l+1;//让首尾元素也满足要求
for (int m=1;m<=n;m++)
a[m]=scanner.nextInt();
for (int i=1;i<=n+1;i++)
ans+=(a[i]-a[i-1]-1)/k;
System.out.println(ans);
这个题目还是比较有意思的!
第九题🎈
class D9
void method()
/**
* 根据杨辉三角定理来算组合数
*/
int t=1000000007;
Scanner scanner = new Scanner(System.in);
int n=scanner.nextInt();
int [][]c=new int[1001][1001];//如果n特别大的话这个地方也可以用链表
c[1][0]=c[1][1]=1;
for(int i=2;i<=n;i++)
c[i][0]=1;//每行第一个元素都是1
for (int j=1;j<=i;j++)
c[i][j]=(c[i-1][j]+c[i-1][j-1])%t;//杨辉三角求元素的公式
System.out.println(c[n-1][(n-1)/2]);
这个题归根结底也是一个组合数问题,最主要在于发现其中的排列组合规律 ,并且联想到杨辉三角求组合数。
第十题🎈
class D10
void method()
Scanner in = new Scanner(System.in);
int i=in.nextInt();
int j=in.nextInt();
int[][] a=new int[i][j];
for(int m=0;m<i;m++)
for (int n=0;n<j;n++)
a[m][n]=in.nextInt();
for(int m=0;m<i;m++)
for (int n=0;n<j;n++)
if (a[m][n] == 1)
if (m != i-1 && n != j-1 && m != 0 && n != 0)
if (a[m + 1][n] == 0 && a[m - 1][n] == 0 && a[m][n + 1] == 0 && a[m][n - 1] == 0)
System.out.println("NO");
return;
if ( n != j-1 && m != 0 && n != 0)
if ( a[m - 1][n] == 0 && a[m][n + 1] == 0 && a[m][n - 1] == 0)
System.out.println("NO");
return;
if (m != i-1 && m != 0 && n != 0)
if (a[m + 1][n] == 0 && a[m - 1][n] == 0 && a[m][n - 1] == 0)
System.out.println("NO");
return;
if (m != i-1 && n != j-1 && n != 0)
if (a[m + 1][n] == 0 && a[m][n + 1] == 0 && a[m][n - 1] == 0)
System.out.println("NO");
return;
if (m != i-1 && n != j-1 && m != 0 )
if (a[m + 1][n] == 0 && a[m - 1][n] == 0 && a[m][n + 1] == 0 )
System.out.println("NO");
return;
System.out.println("YES");
return;
这个题目的话呢,难度是不怎么难,思路很简单,用暴力解就OK;
写完题目之后才发现我这个输入有点问题,不能连续输入比如说:
题目要求输入:
3 6
111111
111000
100111
而我这二维数组输入:
3 6
1 1 1 1 1 1
1 1 1 0 0 0
1 0 0 1 1 1
后续再容我想想,今天写题解的时候才发现我当时写错了,哈哈哈!
最后总结如下:
模拟赛的题目比真题要简单很多(可能是官方怕出太难了,把他的金主爸爸们吓跑吧,哈哈哈哈哈),这次模拟赛就当是给自己重新熟悉一下基础语法知识吧!
以上是关于蓝桥杯第一次模拟赛JAVA题解的主要内容,如果未能解决你的问题,请参考以下文章