1:15.125GB
问题描述】
在计算机存储中,15.125GB是多少MB?
package 校内模拟赛2020第一次;
import java.util.Scanner;
public class 字节 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double n=sc.nextDouble();
double sum=n*1024;
System.out.println(sum);
}
}
2:约数个数
【问题描述】
1200000有多少个约数(只计算正约数)。
package 校内模拟赛2020第一次;
import java.util.Scanner;
public class 约数的个数 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
int sum=1;
for(int i=2;i<=n;i++) {
if(n%i==0) {
sum++;
}
}
System.out.println(sum);
}
}
4:数字9
package 校内模拟赛2020第一次;
public class 数字9 {
public static void main(String[] args) {
int count=0;
for(int i=1;i<=2019;i++) {
String str=String.valueOf(i);
for(int j=0;j<str.length();j++) {
if(str.charAt(j)=='9') {
count++;
break;
}
}
}
System.out.println(count);
}
}
5:
数位递增的数
题解:就是判断1-n中有多少个数是属于从左到右慢慢增加的;我们直接用递归一下,用字符串会超时。
package 校内模拟赛2020第一次;
import java.util.Scanner;
public class 数位递增的数递归 {
public static int n=0,count=0;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n=sc.nextInt();
check(0,1);
System.out.println(count-1);
}
public static void check(int num,int temp) {
if(num>n) {
return;
}else {
count++;
}
for(int i=temp;i<10;i++) {
check(num*10+i,i);
}
}
}
6:递增三元组
题解:就是给出一个数组,我们遍历每一个元素,判断这个元素的左边比他小,用边比他大。
package 校内模拟赛2020第一次;
import java.util.Scanner;
public class 递增三元组 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
int a[]=new int[n+1];
for(int i=1;i<=n;i++) {
a[i]=sc.nextInt();
}
int sum=0;
boolean bool1=false;
boolean bool2=false;
for(int i=2;i<=n-1;i++) {
for(int j=1;j<i;j++) {
if(a[j]<a[i]) {
bool1=true;
break;
}
}
for(int k=i+1;k<=n;k++) {
if(a[k]>a[i]) {
bool2=true;
break;
}
}
if(bool1&&bool2) {
sum++;
bool1=bool2=false;
}
}
System.out.println(sum);
System.out.println(t2-t1);
}
}
7:音节判断
直接判断这个单词是否是元+辅+元+辅
package 校内模拟赛2020第一次;
import java.util.Scanner;
public class 音节判断 {//元音字母a e i o u
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
int k=0;
int a[]=new int[26];
a[0]=a[4]=a[8]=a[14]=a[20]=1;
for(int i=0;i<str.length()-1;i++) {
if(a[str.charAt(i)-'a']!=a[str.charAt(i+1)-'a']) {
k++;
}
}
if(k==3) {
System.out.println("yes");
}else {
System.out.println("no");
}
}
}
8:长草
题解:
典型的dfs,
DFS的模板
import java.awt.*;
import java.util.ArrayList;
/**
* Created by zhangzexiang on 2016/8/9.
*/
public class SmartRorbot_1048 {
static int maxn=100;
static boolean vst[][] = new boolean[maxn][maxn]; // 访问标记
static int map[][] = new int[maxn][maxn]; // 坐标范围
ArrayList<Point> dir = new ArrayList<>(); //方向向量,(x,y)周围的四个方向
public static boolean CheckEdge(int x,int y) //边界条件和约束条件的判断
{
if(!vst[x][y] && ) // 满足条件
return true;
else // 与约束条件冲突
return false;
}
void dfs(int x,int y)
{
vst[x][y]=true; // 标记该节点被访问过
if(map[x][y]==) // 出现目标态G
{
...... // 做相应处理
return;
}
for(int i=0; i<4; i++)
{
if(CheckEdge(x+dir[i][0],y+dir[i][1])) // 按照规则生成下一个节点
dfs(x+dir[i][0],y+dir[i][1]);
}
return; // 没有下层搜索节点,回溯
}
public static void main(String[] args)
{
}
}
package 校内模拟赛2020第一次;
import java.util.Scanner;
public class 长草 {
public static int[][] bool;
public static int[] start;
public static int[] end;
public static char[][] num;
public static int k=0,n=0,m=0;
public static int[] x= {0,1,0,-1};
public static int[] y= {1,0,-1,0};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n=sc.nextInt();
m=sc.nextInt();
num=new char[n][m];
for(int i=0;i<n;i++) {
String s=sc.next();
num[i]=s.toCharArray();//输入数据
}
k=sc.nextInt();//表示k个月
sc.close();
start=new int[n*m];//表示开始的状态
end = new int[n*m];//表示结束的状态
int temp=0;
bool=new int[n][m];
for(int i=0;i<n;i++) {
for(int j=0;j<m;j++) {
if(num[i][j]=='g') {//找长草的空地
start[temp]=i;
end[temp++]=j;
}else {
bool[i][j]=-1;
}
}
}
for(int i=0;i<temp;i++) {
dfs(start[i],end[i],k);//dfs
}
for(int i=0;i<n;i++) {
for(int j=0;j<m;j++) {
System.out.print(num[i][j]);
}
System.out.println();
}
}
public static void dfs(int xx,int yy,int kk) {
bool[xx][yy]=kk;
num[xx][yy]='g';
for(int i=0;i<4;i++) {
int newx =x[i]+xx;
int newy=y[i]+yy;
if(newx>=0&&newy>=0&&newx<n&&newy<m&&kk-1>bool[newx][newy]) {
dfs(newx,newy,kk-1);
}
}
}
}
9:序列计数
记忆化递归的思路,考虑状态的转移:如果我们用f(i,j)表示前一个数是i,当前数是1到j的合法序列的个数;有f(i,j) = 1 + f(i,j-1) + f(j,abs(i-j)-1)即分为两个部分1)i作为前一个数,从1到j-1为当前数的合法序列的个数已经计算好,2)求以j为尾数,后面选择1到abs(i-j)-1的合法序列的个数。如 f(10,5)=f(10,4)+f(5,4);而不是枚举1到5;这样每次解答树只展开两个节点,相当于减少一层循环,虽然解答树的层次还是很深,但是由于记忆的存在,解空间仍然是N的平方。可在100ms内解决。
package 校内模拟赛2020第一次;
import java.util.Scanner;
public class 序列计数 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
int N=n+2;
long a[][]=new long[N][N];
for(int i=0;i<a.length;i++) {
for(int j=0;j<a.length;j++) {
a[i][j]=1;
}
}
int k=1;
long b[]=new long[N];
long c[]=new long[N];
for(int i=0;i<c.length;i++) {
b[i]=1;
c[i]=1;
}
for(int i=3;i<a.length;i++) {
for(int j=1;j<=k;j++) {
b[j]+=a[j][k-j+1]%10000;
b[j]%=10000;
a[i][j]=b[j];
}
long sum=1;
for(int j=1;j<=k;j++) {
sum+=a[i][j]%10000;
a[k-j+1][i]=sum;
}
k++;
}
long sum=0;
for(int i=1;i<=n;i++) {
sum+=a[n][i];
}
System.out.println(sum%10000);
}
}