蓝桥杯专题-真题版含答案-【蚂蚁感冒】【地宫取宝】【波动数列】【李白打酒】

news2024/12/25 23:38:48
  • 点击跳转专栏=>Unity3D特效百例
  • 点击跳转专栏=>案例项目实战源码
  • 点击跳转专栏=>游戏脚本-辅助自动化
  • 点击跳转专栏=>Android控件全解手册
  • 点击跳转专栏=>Scratch编程案例
  • 点击跳转=>软考全系列
  • 点击跳转=>蓝桥系列

👉关于作者

专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎底部卡片私我,获取更多支持,交流让学习不再孤单

芝麻粒儿-空名先生

👉实践过程

需要所有整理的文档可底部卡片联系我,直接发压缩包。

😜蚂蚁感冒

标题:蚂蚁感冒
长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。
每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。
当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。
这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。
请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。

【数据格式】
第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数。
接着的一行是n个用空格分开的整数 Xi (-100 < Xi < 100), Xi的绝对值,表示蚂蚁离开杆子左边端点的距离。
正值表示头朝右,负值表示头朝左,数据中不会出现0值,也不会出现两只蚂蚁占用同一位置。
其中,第一个数据代表的蚂蚁感冒了。
要求输出1个整数,表示最后感冒蚂蚁的数目。

例如,输入:
3
5 -2 8
程序应输出:
1

再例如,输入:
5
-10 8 -20 12 25
程序应输出:
3

//c++
#include <iostream>
using namespace std;

int main(int argc, const char * argv[]) {
    int n;
    scanf("%d",&n);
    int arr[n];
    for (int i = 0; i < n; ++i) {
        scanf("%d",&arr[i]);
    }
    int x = arr[0];
    if(x>0){//向右
        int ans=1;
        for (int i = 0; i < n; ++i) {
            if(arr[i]<0&&-arr[i]>x)//从右向左
                ans++;
        }
        if(ans!=1)//有从右到左
            for (int i = 0; i < n; ++i) {
                if(arr[i]>0&&arr[i]<x)//从右向左
                    ans++;
            }
        
        printf("%d\n",ans);
        
    } 
    
    if(x<0){//向左
//        左侧从左到右的
        int ans=1;
        for (int i = 0; i < n; ++i) {
            if(arr[i]>0&&arr[i]<-x)
                ans++;
        }
        if(ans!=1)
            for (int i = 0; i < n; ++i) {
                if(arr[i]<0&&-arr[i]>-x)
                    ans++;
            }
        printf("%d\n",ans);
    }
    
    return 0;
}

😜地宫取宝

标题:地宫取宝
X 国王有一个地宫宝库。是 n x m 个格子的矩阵。每个格子放一件宝贝。每个宝贝贴着价值标签。
地宫的入口在左上角,出口在右下角。
小明被带到地宫的入口,国王要求他只能向右或向下行走。
走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿)。
当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可以送给小明。
请你帮小明算一算,在给定的局面下,他有多少种不同的行动方案能获得这k件宝贝。

【数据格式】
输入一行3个整数,用空格分开:n m k (1<=n,m<=50, 1<=k<=12)
接下来有 n 行数据,每行有 m 个整数 Ci (0<=Ci<=12)代表这个格子上的宝物的价值
要求输出一个整数,表示正好取k个宝贝的行动方案数。该数字可能很大,输出它对 1000000007 取模的结果。

例如,输入:
2 2 2
1 2
2 1
程序应该输出:
2

再例如,输入:
2 3 2
1 2 3
2 1 5
程序应该输出:
14

//c++
#include <iostream>
#include <cstring>

using namespace std;
const int MOD = 1000000007;
int n, m, k;
int data[50][50];

long long ans;
long long cache[50][50][14][13];

void dfs(int x, int y, int max, int cnt) {
    if (x == n || y == m || cnt > k)
        return;
    int cur = data[x][y];
    if (x == n - 1 && y == m - 1)//已经面临最后一个格子
    {
        if (cnt == k || (cnt == k - 1 && cur > max)) {
            ans++;
            if (ans > MOD)
                ans %= MOD;
        }
    }
    if (cur > max) {//可以取这个物品
        dfs(x, y + 1, cur, cnt + 1);
        dfs(x + 1, y, cur, cnt + 1);
    }
    //对于价值较小,或者价值大但不去这个物品的情况如下
    dfs(x, y + 1, max, cnt);
    dfs(x + 1, y, max, cnt);

}

long long dfs2(int x, int y, int max, int cnt) {
//    查缓存
    if (cache[x][y][max+1][cnt] != -1)
        return cache[x][y][max+1][cnt];

    long long ans = 0;
    if (x == n || y == m || cnt > k)
        return 0;
    int cur = data[x][y];
    if (x == n - 1 && y == m - 1)//已经面临最后一个格子
    {
        if (cnt == k || (cnt == k - 1 && cur > max)) {
            ans++;
            if (ans > MOD)
                ans %= MOD;
        }
        return ans;
    }
    if (cur > max) {//可以取这个物品
        ans += dfs2(x, y + 1, cur, cnt + 1);
        ans += dfs2(x + 1, y, cur, cnt + 1);
    }
    //对于价值较小,或者价值大但不去这个物品的情况如下
    ans += dfs2(x, y + 1, max, cnt);
    ans += dfs2(x + 1, y, max, cnt);

    cache[x][y][max+1][cnt]=ans % MOD;
    return cache[x][y][max+1][cnt];
}

int main(int argc, const char *argv[]) {
    scanf("%d %d %d", &n, &m, &k);
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            scanf("%d", &data[i][j]);
        }
    }
//    dfs(0, 0, -1, 0);//第一个点的价值可能是0
//    printf("%d\n", ans);
memset(cache,-1, sizeof(cache));
    printf("%lli\n", dfs2(0, 0, -1, 0));
    return 0;
}
//java
public class _09地宫取宝 {
  private static final int MOD = 1000000007;
  static int[][] data;
  private static int n;
  private static int m;
  private static int k;

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    n = sc.nextInt();
    m = sc.nextInt();
    k = sc.nextInt();
    data = new int[n][m];
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        data[i][j] = sc.nextInt();
      }
    }
    for (int i = 0; i < 51; i++) {
      for (int j = 0; j < 51; j++) {
        for (int l = 0; l < 14; l++) {
          for (int o = 0; o < 14; o++) {
            cache[i][j][l][o] = -1;
          }
        }
      }
    }
    long ans = dfs(0, 0, -1, 0);
    System.out.println(ans);
  }

  static long[][][][] cache = new long[51][51][14][14];

  private static long dfs(int x, int y, int max, int cnt) {
    if (cache[x][y][max + 1][cnt] != -1) return cache[x][y][max + 1][cnt];
    if (x == n || y == m || cnt > k) return 0;
    int cur = data[x][y];
    int ans = 0;
    if (x == n - 1 && y == m - 1) {
      if (cnt == k || (cnt == k - 1 && cur > max)) return 1;
      return ans;
    }

    if (cur > max) {
      ans += dfs(x, y + 1, cur, cnt + 1);
      ans += dfs(x + 1, y, cur, cnt + 1);
    }
    ans += dfs(x, y + 1, max, cnt);
    ans += dfs(x + 1, y, max, cnt);
    cache[x][y][max + 1][cnt] = ans % MOD;
    return ans;
  }
}

😜波动数列

标题:波动数列
观察这个数列:
1 3 0 2 -1 1 -2 …
这个数列中后一项总是比前一项增加2或者减少3。
栋栋对这种数列很好奇,他想知道长度为 n 和为 s 而且后一项总是比前一项增加a或者减少b的整数数列可能有多少种呢?

【数据格式】
输入的第一行包含四个整数 n s a b,含义如前面说述。
输出一行,包含一个整数,表示满足条件的方案数。由于这个数很大,请输出方案数除以100000007的余数。

例如,输入:
4 10 2 3
程序应该输出:
2

【样例说明】
这两个数列分别是2 4 1 3和7 4 1 -2。

【数据规模与约定】
对于10%的数据,1<=n<=5,0<=s<=5,1<=a,b<=5;
对于30%的数据,1<=n<=30,0<=s<=30,1<=a,b<=30;
对于50%的数据,1<=n<=50,0<=s<=50,1<=a,b<=50;
对于70%的数据,1<=n<=100,0<=s<=500,1<=a, b<=50;
对于100%的数据,1<=n<=1000,-1,000,000,000<=s<=1,000,000,000,1<=a, b<=1,000,000。

//java
public class _10波动数列 {

  private static int n;
  private static long s;
  private static long a;
  private static long b;

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    n = sc.nextInt();
    s = sc.nextLong();
    a = sc.nextLong();
    b = sc.nextLong();

    int t = n * (n - 1) / 2;

    int[] dp = new int[t + 1];
    dp[0] = 1;
    for (int i = 1; i <= n - 1; i++) {
      for (int j = i * (i + 1) / 2; j >= i; j--) {
        // dp[j] += dp[j - i];
        // if (dp[j] > 100000007) dp[j] %= 100000007;
        dp[j] = (dp[j] + dp[j - i]) % 100000007;
      }
    }
    long ans = 0;
    for (int i = 0; i <= t; i++) {
      if ((s - i * a + (t - i) * b) % n == 0)
        ans = (ans + dp[i]) % 100000007;
      // if (ans > 100000007) ans %= 100000007;
    }
    System.out.println(ans);
  }
}
//c++
#include <iostream>
#include <vector>
#include <cstring>

#define MOD  100000007
using namespace std;

typedef long long LL;
int n, s, a, b;
long long ans;

void printPath(const vector<int> &path);

void solve1();

void dp1();

void dp2();

void dp3();

/**
 *
 * @param x 上一项
 * @param cnt 截止上一项已经有多少个
 * @param sum 截止上一项已经求得的和
 */
void dfs(LL x, int cnt, int sum, vector<int> path) {
    if (cnt == n) {
        if (sum == s) {
            ans++;
        }
//        printPath(path);
        if (ans > MOD)ans %= MOD;
        return;
    }
    path.push_back(x + a);
    dfs(x + a, cnt + 1, sum + x + a, path);

    path.erase(path.end() - 1);
    path.push_back(x - b);
    dfs(x - b, cnt + 1, sum + x - b, path);
}

void printPath(const vector<int> &path) {
    for (int i = 0; i < path.size(); ++i) {
        cout << path[i] << " ";
    }
    cout << endl;
}

void solve2();

int main(int argc, const char *argv[]) {
    scanf("%d %d %d %d", &n, &s, &a, &b);
//    solve1();
//    solve2();
//    dp1();
//    dp2();
    dp3();
    return 0;
}

/*一维数组*/
void dp3() {
    int t = n * (n - 1) / 2;
    int dp[t + 1];
    memset(dp, 0, sizeof(dp));
    dp[0] = 1;

    for (int i = 1; i < n; ++i) {
        for (int j = i * (i + 1) / 2; j >= i; --j) {//减少j的枚举
            dp[j] = (dp[j] + dp[j - i]) % MOD;
        }
    }

    for (LL ta = 0; ta <= t; ++ta) {
        LL i = s - ta * a + (t - ta) * b;
        if (i % n == 0)
            (ans += dp[ta]) %= MOD;
    }
    cout << ans << endl;
}

/*2行的数组滚动使用*/
void dp2() {
    int t = n * (n - 1) / 2;
    int dp[2][t + 1];
    memset(dp, 0, sizeof(dp));
    dp[0][0] = 1;
    dp[1][0] = 1;

    int row = 0;
    for (int i = 1; i < n; ++i) {
        row = 1 - row;
        for (int j = 1; j <= i * (i + 1) / 2; ++j) {//这里可以减少枚举
            if (i > j) dp[row][j] = dp[1 - row][j] % MOD;
            else dp[row][j] = (dp[1 - row][j] + dp[1 - row][j - i]) % MOD;
        }
    }
//    必须用LL,因为s+tb有可能超出int  10^9+10^6*10^6
    for (LL ta = 0; ta <= t; ++ta) {
        LL i = s - ta * a + (t - ta) * b;
        if (i % n == 0)
            (ans += dp[row][ta]) %= MOD;//选择性地累加最后一行
    }
    cout << ans << endl;

}

void dp1() {
    int t = n * (n - 1) / 2;//最终式子中a或b的最大的个数(系数)
    int dp[n][t + 1];
    memset(dp, 0, sizeof(dp));
    dp[0][0] = 1;
    for (int i = 0; i < n; ++i) {
        dp[i][0] = 1;
    }
    for (int i = 1; i < n; ++i) {
        for (int j = 1; j <= t; ++j) {
            if (i > j) dp[i][j] = dp[i - 1][j] % MOD;
            else dp[i][j] = (dp[i - 1][j] + dp[i - 1][j - i]) % MOD;
        }
    }
    for (LL ta = 0; ta <= t; ++ta) {
        LL i = s - ta * a + (t - ta) * b;
        if (i % n == 0)
            (ans += dp[n - 1][ta]) %= MOD;
    }
    cout << ans << endl;
}

void solve2() {
    int t = n * (n - 1) / 2;
    LL x;
    LL x1 = (s - a * t) / n;
    LL x2 = (s + b * t) / n;
//    枚举首项
    for (x = x1; x <= x2; x++) {
//        对x进行初步检测,有的x,无论怎么搭配a,b的数目,都不能得出s
        for (int ta = 0; ta <= t; ++ta) {//枚举a的数目[0,t]
            LL cal = x * n + ta * a - (t - ta) * b;
            if (cal == s) {//减少对x的枚举
                vector<int> path;
                path.push_back(x);
                dfs(x, 1, x, path);
            }
        }

    }
    printf("%lli\n", ans);
}

void solve1() {
    int t = n * (n - 1) / 2;//最终式子中a或b的最大的个数(系数)
    LL x;
//    枚举首项
    LL x1 = (s - a * t) / n;
    LL x2 = (s + b * t) / n + 1;
    for (x = x1; x <= x2; x++) {
        vector<int> path;
        path.push_back(x);
        dfs(x, 1, x, path);
    }
    printf("%lli\n", ans);
}

😜李白打酒

标题:李白打酒
话说大诗人李白,一生好饮。幸好他从不开车。
一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:
无事街上走,提壶去打酒。
逢店加一倍,遇花喝一斗。
这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。
请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb 就是合理的次序。
像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。

//c++
#include <iostream>

using namespace std;

int ans;

void f(int dian, int hua, int jiu) {
    if (dian == 0 && hua == 0 && jiu == 1)
        ans++;
    if (dian > 0) f(dian - 1, hua, jiu * 2);
    if (hua > 0) f(dian, hua - 1, jiu - 1);
}

int main(int argc, const char *argv[]) {
    f(5, 9, 2);
    cout << ans << endl;
    return 0;
}
//java
public class _02李白打酒 {
  private static int ans;

  public static void main(String[] args) {
    f(5, 9, 2);
    System.out.println(ans);
  }

  private static void f(int dian, int hua, int jiu) {
    if (dian == 0 && hua == 0 && jiu == 1) ans++;
    if (dian > 0) f(dian - 1, hua, jiu * 2);
    if (hua > 0) f(dian, hua - 1, jiu - 1);
  }
}

👉其他

📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

温馨提示点击下方卡片获取更多意想不到的资源。
空名先生

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/727662.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java开发的打包和分发机制之jar包

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于jar包的相关操作吧 一.什么是jar包 "jar包"是Java Archive的缩写&#xff0c;它是一种用于打包Java类、资源文件、库等内容的文件格式Jar包是一种特…

flutter聊天界面-聊天气泡长按弹出复制、删除按钮菜单

flutter聊天界面-聊天气泡长按弹出复制、删除按钮菜单 在之前实现了flutter聊天界面的富文本展示内容&#xff0c;这里记录一下当长按聊天气泡的时候弹出复制、删除等菜单功能 一、查看效果 当长按聊天气泡的时候弹出复制、删除等菜单&#xff0c;可新增更多按钮 二、代码实现…

【网络安全带你练爬虫-100练】第8练:json数据的最小项提取

目录 一、目标1&#xff1a;爬取指定json中数据 二、目标2&#xff1a;循环取json中数据 三、目标3&#xff1a;提取每个数据中的某一项 四、网络安全小圈子 一、目标1&#xff1a;爬取指定json中数据 爬取data里数据 核心代码&#xff1a; dirt1 json.loads(res.text)pr…

奉劝各位项目经理,最好别参加8月PMP考试了……

早上好&#xff0c;我是老原。 上周我看到一篇介绍考证的文章&#xff0c;结果在热评看到了PMP证书。 不得不承认&#xff0c;PMP证书现在的火热程度已经超过了我们的想象。前几年我选择考PMP&#xff0c;也只是为了在求职的时候多个优势。 但是现在&#xff0c;几乎我周围所…

ThreadLocal使用场景介绍以及关于内存泄漏的探讨

目录 1. 使用场景一&#xff1a;线程隔离 2. 使用场景二&#xff1a;使用ThreadLocal进行跨函数数据传递 3. ThreadLocal导致的内存泄漏问题 4. ThreadLocal在Spring框架中的应用 5. 扩展&#xff1a;InheritableThreadLocal 转载&#xff1a;【Java】ThreadLocal使用场景…

字节、数据位、ascii码、RS232串口、modbus协议

RS232通信协议详解 - 百度文库 ASCII_百度百科 ascii码表 modebus协议 - 百度文库https://wenku.baidu.com/view/58aae6134431b90d6c85c7b6.html?_wkts_1688713246949&bdQueryascii%E7%A0%81modelbus%E7%A0%81 Modbus 的RTU、ASCII、TCP傻傻搞不清楚&#xff1f;一文全…

归并排序的应用—逆序对的个数

一、&#xff08;题目&#xff09; 给定一个长度为 n 的整数数列&#xff0c;请你计算数列中的逆序对的数量。 逆序对的定义如下&#xff1a;对于数列的第 i个和第 j 个元素&#xff0c;如果满足 i<j且 a[i]>a[j]&#xff0c;则其为一个逆序对&#xff1b;否则不是。 输…

吐血整合!风控与反欺诈相关数据来源(上)

本文会分上、下两篇&#xff0c;介绍各种风控与反欺诈相关的数据来源&#xff0c;包括其主要的数据维度和产品服务形态。 目录&#xff1a; 人行二代征信 持牌征信机构数据 司法大数据 航旅大数据 铁路大数据 税务大数据 交通大数据 电力大数据 保险大数据 人社大数据 一、人行…

vs2019打包发布c#编写的exe应用

由于该应用还要引用其它的exe应用&#xff0c;所以 .NET Framework 4.6.2 脱机安装程序Windows - Microsoft 支持 参考下面的配置即可 VS2019如何打包程序_vs2019 打包_咻咻咻...的博客-CSDN博客https://blog.csdn.net/qq_37043193/article/details/119530253?ops_request_…

JVM源码剖析之Java对象创建过程

关于 "Java的对象创建" 这个话题分布在各种论坛、各种帖子&#xff0c;文章的水平参差不齐。并且大部分仅仅是总结 "面试宝典" 的流程&#xff0c;小部分就是copy其他帖子&#xff0c;极少能看到拿源码作为论证。所以特意写下这篇文章。 版本信息如下&…

搭建帮助中心5大注意事项

在现代互联网时代&#xff0c;为企业网站建立一个优雅实用的网站帮助中心变得尤为重要。一个好的网站帮助中心可以帮助企业解决客户的难点、痛点&#xff0c;提高客户满意度、期待值&#xff0c;从而更好地留住客户&#xff0c;增加收入。 如果没有帮助中心或者是帮助中心创建…

深入理解链表:一种动态的线性数据结构

文章目录 前言1. 概述2. 单向链表3. 单向链表&#xff08;带哨兵&#xff09;4. 双向链表&#xff08;带哨兵&#xff09;5. 环形链表&#xff08;带哨兵&#xff09;6. 结语 前言 链表是我们在日常编程中经常使用的一种数据结构&#xff0c;它相比于数组具有更好的动态性能。…

Spark(17):RDD、DataFrame、DataSet三者的关系

目录 0. 相关文章链接 1. 三者的产生 2. 三者的共性 3. 三者的区别 3.1. RDD 3.2. DataFrame 3.3. DataSet 4. 三者的互相转换 4.1. 互相转换图 4.2. DataFrame 和 DataSet 转换 0. 相关文章链接 Spark文章汇总 1. 三者的产生 在 SparkSQL 中 Spark 为我们提供了两…

Flutter TextField 输入框 简单使用

创建方式一&#xff1a; ///用于文本输入框 TextEditingController controller new TextEditingController();/// 设置TextField中显示的内容void setEditeInputTextFunction(String flagText) {controller .text flagText;}/// 清除TextField中显示的内容void clearEditeIn…

Web服务器群集:podman与docker技术集群

目录 一、理论 1.虚拟化 2.容器 3.podman 4.docker 5.podman与docker区别 二、实验 1.部署podman 2.部署docker 三、总结 一、理论 1.虚拟化 &#xff08;1&#xff09;概念 虚拟化&#xff1a;将应用程序和系统内核资源进行解耦&#xff0c;以操作系统级别进行隔离…

利用langchain-ChatGLM、langchain-TigerBot实现基于本地知识库的问答应用

目录 1 原理 2 langchain-ChatGLM的开发部署 2.1 安装环境 2.2 加载本地模型 3 langchain-TigerBot的开发部署 刷B站的时候&#xff0c;无意中看到吴恩达的一个langchain的教程&#xff0c;然后去github上搜了下&#xff0c;发现别人利用langchain和chatGLM做的基于本地知…

【C++11】lambda表达式 包装器

文章目录 1 lambda表达式1.1 引例1.2 lambda表达式的基本语法1.3 lambda表达式的底层原理 2 包装器3 bind 1 lambda表达式 1.1 引例 在C98中&#xff0c;如果想要对一个数据集合中的元素进行排序&#xff0c;可以使用std::sort方法&#xff1a; #include <algorithm> …

docker运行 mycli

1. 制作镜像 1.1 Dockerfile: FROM python:3.8 ENV MYSQL_HOST192.168.1.108 ENV MYSQL_PWDroot RUN apt-get update && apt-get install -y less RUN pip3 install mycli ENTRYPOINT ["mycli"] 注意 python:3.8 pip3 mycli 具有版本限制的,如果改了版…

【计算机网络】1.5——计算机网络的体系结构(网络分层模型)

计算机网络的体系结构 概述 计算机网络的体系结构是计算机网络及其构建所应完成功能的精确定义 考题 不属于网络体系结构所描述的内容的是 A、网络的层次 B、每层使用的协议 C、协议的内部实现细节 D、每层必须完成的功能 这些功能的「实现细节」&#xff0c;是遵守这种体系…

Web 前端 Day 1

课程大纲&#xff1a; html 结构 css 表现 Js 行为 jquery库 &#xff08;地位下降趋势 仍旧在用&#xff09; bootstrap 前端高端只是&#xff1a;angular angularjs html 超文本标记语言 相关解释 描述网页的语言 不仅有文字&#xff0c;还有图片、音频、视频等等 超…