校内题目解题

这篇博客介绍了五个算法题目,包括:1) 组合数字构成三角形;2) 租自行车问题,探讨不同排法避免无车可租;3) 在矩阵中寻找和为21的序列;4) 探索因子为3,5,7的数列;5) 通过组合9个数字形成等于100的等式。每个题目都详细阐述了思路并提供了Java代码实现。" 100154150,8724011,数据库的三级模式结构与映射解析,"['数据库理论', '数据模型', '数据结构']
摘要由CSDN通过智能技术生成

1 三角形

数字0到9可以组成很多个边长为4个数字的三角形,例如下图

​0

3 1

6 5 2

9 8 7 4

仔细观察上面的三角形发现,上面的数比下面相邻的两个数都小,问这样的三角形有多少个?

请编程输出最终的结果。

预期输出:

768

思路

基本思路是将0-9进行全排列,然后将其转换为三角形进行判断

代码

public class Main{
   
	static int[] f = new int[15];
	static boolean[] book = new boolean[15];
	static int[][] a = new int[6][6];
	static int res;
	public static void main(String[] args) {
   
		dfs(1);
		System.out.println(res);
	}
	//全排列函数(dfs式)
	static void dfs(int step){
   
		if(step > 10){
   
			//每出现一个组合进行一次判断
			check();
			return;
		}
		for(int k = 0 ; k <= 9 ; k++){
   
			if(!book[k]){
   
				book[k] = true;
				f[step] = k;
				dfs(step+1);
				book[k] = false;
			}
		}
	}
	//判断三角形是否符合条件的函数
	static void check(){
   
		int idx = 1;
		//转换为三角形
		for(int i = 1 ; i <= 4 ; i++)
			for(int j = 1 ; j <= i ; j++)
				a[i][j] =f[idx++]; 
		//进行判断
		for(int i = 1 ; i <= 3 ; i++){
   
			for(int j = 1 ; j <= i ; j++){
   
				if(a[i][j] > a[i+1][j] || a[i][j] > a[i+1][j+1]) return;
			}
		}
		res++;
	}
}

2 租自行车

春天到了,某公园租自行车的生意火爆,上午自行车就会全部租完,到了中午的时候,租车窗口排起了长龙,

假设还车的有r个人,租车的有b个人。现在的问题是,这些人有多少种排法,可以避免出现无车可租的情况。

输入格式

两个整数,表示r和b

输出格式

一个整数,表示队伍的排法的方案数。

样例输入1

2 3

样例输出1

0

样例输入2

3 2

样例输出2

5

数据规模和约定

r,b∈[0,16]

测试集:

测试集1
系统输入:16 16
预期输出:35357670

测试集2
系统输入:16 14
预期输出:25662825

测试集3
系统输入:15 16
预期输出:0

思路1

将还车的人设定为1,借车的人设定为-1,排成一个数组。如还车3人,借车2人,排成[1,1,1,-1,-1]。

然后进行全排列,找出所有组合。对每一种排列进行判断,从前往后依次相加,如果加到某一值时,和为负数,说明借车的人比还车的人多,就不符合条件。

如果借车的人数比还车的人多,则一定会有无车可借的情况,直接输出0。

该思路的问题是,数据规模是 1-16,也就是可能需要排列32位数,肯定是会TLE的。

代码1

import java.util.Scanner;
public class Main{
   
	static int[] book = new int[2],ne = {
   1,-1}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值