2020校内模拟赛第一次

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);
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值