【C语言】语言篇——数组和字符串

news2024/11/16 21:34:51

C站的小伙伴们,大家好呀😝😝!我最近在阅读学习刘汝佳老师的《算法竞赛入门经典》,今天将整理本书的第三章——数组和字符串的一些习题,本章习题较多,下选取部分习题进行练习总结,在这里和大家分享,一起进步呀!✊✊✊

数组和字符串

  • 逆序输出
  • 开灯问题
  • 回文字
  • 习题
    • 得分(score)
    • 分子量(Molar Mass)
    • 数数字(Digit Counting)
    • 周期串 (Periodic Strings)
    • DNA序列(DNA Consensus String)
  • 思考

逆序输出

读入一些整数,逆序输出到一行中。已知整数不超过100个。

#include <stdio.h>
#include <string.h>
int maxn[105];//若数组较长则将其设为全局变量
int main (void)
{
    int i=0,x,k;
    memset(maxn,0,sizeof(maxn));//将数组清零
    while((scanf("%d",&x))==1) 
        maxn[i++]=x;//先将x赋值给maxn[i],之后i++
    for (k=i-1;k>=0;k--)
    printf("%d ",maxn[k]);
    return 0;   

}

scanf()函数返回值
scanf()函数返回的是成功输入的变量的个数,当输入结束时,scanf()函数无法再次读取x,将返回0。
如何告诉程序输入结束了呢?
是按Enter/空格/TAB键吗?我们会发现,按Enter/空格/TAB键,并没有反应,这是因为程序正在等待输入。
在Windows下,输入完毕后先按Enter键,再按Ctrl+Z键,最后再按Enter键。在Linux下,输入完毕后按Ctrl+D键即可结束输入。
大数组需要定义在函数体外的原因
大数组需要定义在函数体外的原因,全局变量在静态存储区内分配内存,而局部变量是在栈内分配内存空间的。C语言编写的程序会在运行期间创建一个堆栈段,用来保存函数的调用关系和局部变量。而在main函数内部定义大数组相当于在栈内需要一个很大的空间,会造成栈的溢出。
因此,当我们需要定义一个极大的数组时,最好在main 函数外部定义这个大数组。

开灯问题

有n盏灯,编号为1~n。第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭)依此类推。一共有k个人,问最后有哪些灯开着?输入n和k,输出开着的灯的编号。k≤n≤1000。

样例输入:
7 3
样例输出:
1 5 6 7

分析:用a[1],a[2],a[3]……a[n]表示编号为1,2,3……n的灯是否开着。

#include <stdio.h>
#include <string.h>
int a[1000];
int main (void)
{
    int n,k,i,j;
    scanf("%d%d",&n,&k);
    memset(a,0,sizeof(a));//数组清零
    //0和1表示开灯和关灯两种状态
    for(i=1;i<=k;i++)//人
        for (j=1;j<=n;j++)//灯
            if (j%i==0)
            {
                if (a[j]==0)
                a[j]=1;
                else
                a[j]=0;
            }
    for(i=1;i<=n;i++)
    if (a[i]==1)
    printf("%d ",i);
    printf("\n");
    return 0;
}

0表示灯关的状态,1表示灯开的状态。从第一个人开始,判断是否是1~n编号的倍数,如果是的话,改变灯的状态,即原来是1,变为0;原来是0,变为1。

回文字

输入一个字符串,判断它是否为回文串以及镜像串。输入字符串保证不含数字0。所谓回文串,就是反转以后和原串相同,如abba和madam。所有镜像串,就是左右镜像之后和原串相同,如2S和3AIAE。注意,并不是每个字符在镜像之后都能得到一个合法字符。在本题中,每个字符的镜像如图所示(空白项表示该字符镜像后不能得到一个合法字符)。
在这里插入图片描述

输入的每行包含一个字符串(保证只有上述字符。不含空白字符),判断它是否为回文
串和镜像串(共4种组合)。每组数据之后输出一个空行。
样例输入:

NOTAPALINDROME
ISAPALINILAPASI
2A3MEAS
ATOYOTA

样例输出:

NOTAPALINDROME – is not a palindrome.
ISAPALINILAPASI – is a regular palindrome.
2A3MEAS – is a mirrored string.
ATOYOTA – is a mirrored palindrome.
分析过程可以看这篇:【C语言】经典题目二
下面是代码实现:

#include<stdio.h>
#include<string.h>
int main (void)
{
    char s[128]={0};
    int i,j,k,n;
    int flagH=1,flagJ=1;
    const char a[80]="AEHIJLMOSTUVWXYZ12358";
    const char b[80]="A3HILJMO2TUVWXY51SEZ8";
    gets(s);
    n=strlen(s);
    //判断是否是回文串
    for(i=0,k=n-1;i<k;i++,k--)
    {
        if (s[i]!=s[k])
        {
            flagH=0;
            break;
        }
    }
    //判断是否是镜像串
    for(i=0,k=n-1;i<k;i++,j--)
    {
        for (j=0;s[j]!=0;j++)
        {
            if (s[i]==a[j])
            {
                if (s[k]!=b[j])
                {
                    flagJ=0;
                }
            }
        }
        if (flagJ==0) break;
    }

    //根据标志量判断
    if(flagH==1 && flagJ==1)
    printf("%s -- is a mirrored palindrome.",s);
    else if (flagH==1 &&flagJ==0)
    printf(" %s-- is a regular palindrome.",s);
    else if (flagH==0 && flagJ==1)
    printf("%s -- is a mirrored string.",s);
    else 
    printf("%s-- is not a palindrome.",s);
    return 0;
}

习题

得分(score)

给出一个由O和X组成的串(长度为1~80),统计得分。每个O的得分为目前连续出现
的O的个数,X的得分为0。例如,OOXXOXXOOO的得分为1+2+0+0+1+0+0+1+2+3。
分析:对键盘输入的长串的每个字符进行判断。设置总和tot=0,若是X,则tot不累加。若是O,则需要判断前面O字符连续出现的个数。

#include<stdio.h>
int main (void)
{
    char a[80]={0};
    int tot=0,i,k;
    gets(a);
    for(i=0;a[i]!='\0';i++)
    {
        if (a[i]=='O')
        {
            tot+=1;
            for (k=i-1;k>=0;k--)
            {
                if (a[k]!='O') break;
                else tot+=1;
            }
        }
    }
    printf("%d\n",tot);
    return 0;
}

分子量(Molar Mass)

给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包含4种原子,分
别为C, H, O, N,原子量分别为12.01, 1.008, 16.00, 14.01(单位:g/mol)。例如,C6H5OH的
分子量为94.108g/mol。

分析:对输入的分子式的每个元素进行循环,其中会有数字和’C’,‘H’,‘O’,'N’四个字母,而我们只对四个字母进行判断。若是的话,看其后的一位是否为数字,若是,需要此原子量×数字,若不是,只需加它本身就可以了。
这里需要解决的是,如果输入的字符数组a中的元素等于’C’或’H’或’O’或’N’,如何利用其对应的原子量?
这里用结构体解决比较方便。可以将’C‘与其原子量12.01进行“捆绑”,将’H‘与其原子量1.008进行“捆绑”,将’O‘与其原子量16.00进行“捆绑”,将’N‘与其原子量14.01进行捆绑。

#include<stdio.h>
struct Molar
{
    char atom;
    double mass;
};
int main (void)
{
    char a[30]={0};
    int i,k;
    double tot=0;
    gets(a);
    struct Molar b[4]={'C',12.01,'H',1.008,'O',16.00,'N',14.01};
    for (i=0;a[i]!='\0';i++)//遍历输入的a字符数组
    {
        for (k=0;k<=3;k++)
        if(a[i]==b[k].atom)
        {
            if (a[i+1]>='1' && a[i+1]<='9')//判断字符其后一位是否为数字
            tot+=b[k].mass * (a[i+1]-'0');//注意分子式中的数字都是以字符型存入字符数组的
            else
            tot+=b[k].mass;
        }
    }
    printf("%lf \n",tot);
    return 0;
}

数数字(Digit Counting)

把前n(n≤10000)个整数顺次写在一起:123456789101112…数一数0~9各出现多少次(输出10个整数,分别是0,1,…,9出现的次数)。
分析:利用sprintf()函数将1~10000输出到字符数组中。存入完毕后,对字符数组进行遍历即可。

关于memset()函数
memset()函数初始化是以一个字节为单位的,也就是说,对字符数组才能初始化为任意值。
memset()函数可以很方便将字符数组全部数组全部初始化为某一个值,例如:

c char a[20]; memset(a,'\0',sizeof(a))
将字符数组亲空。

#include<stdio.h>
#include<string.h>
char a[100000];
int main (void)
{
    int k=0,i;
    int b[10]={0};//用于记录1~9出现的次数
    char x;//记从键盘读入的数字字符
    memset(a,'\0',sizeof(a));//将字符数组清零
    scanf("%s",a);

    //对数组a进行遍历
    for(k=0;a[k]!='\0';k++)
    b[a[k]-'0']++;

    //输出数组b
    for(k=0;k<=9;k++)
    printf("%d ",b[k]);
    return 0;
}

周期串 (Periodic Strings)

如果一个字符串可以由某个长度为k的字符串重复多次得到,则称该串以k为周期。例如,abcabcabcabc以3为周期(注意,它也以6和12为周期)。
输入一个长度不超过80的字符串,输出其最小周期。
分析:对于一个字符串,其周期一定是字符串长度的因子,因此只对因子判断即可。
如何判断是否是周期呢?例如3为一个周期,则一定满足a[0]=a[0+3],a[1]=a[1+3],a[2]=a[2+3];
但是要做判断的话,满足的如上条件是仅仅不够的。例如会出现abcabcdddabcabcddd这种情况。所以我们需要对整个字符串进行判断。

#include <stdio.h>
#include <string.h>
int main (void)
{
    int i,k,len,n;
    int flag;  //设置标志量
    char s[80];
    gets(s);
    len=strlen(s);  
    for(i=1;i<=len;i++)
    {
        if (len%i==0)  //判断是否是因子
        //若是,判断能否为周期
        {
            flag=1;
            for (k=0;k<i;k++)
            {
                for (n=1;n<=len/i-1;n++)
                {
                    if (s[k]!=s[k+n*i]) flag=0;                   
                }
            }

        }
        if (flag==1)
        {
            printf("%d\n",i);
            break;
        }
    }
    return 0;   
}

DNA序列(DNA Consensus String)

输入m个长度均为n的DNA序列,求一个DNA序列,到所有序列的总Hamming距离尽量
小。两个等长字符串的Hamming距离等于字符不同的位置个数,例如,ACGTGCGAHamming距离为2(左数第1, 4个字符不同)。

输入整数m和n(4≤m≤50, 4≤n≤1000),以及m个长度为n的DNA序列(只包含字母A,C,G,T),输出到m个序列的Hamming距离和最小的DNA序列和对应的距离。如有多
解,要求为字典序最小的解。例如,对于下面5个DNA序列,最优解为TAAGATAC。

TATGATAC
TAAGCTAC
AAAGATCC
TGAGATAC
TAAGATGT

后来发现的问题:都错题了!!!求一个DAN序列,这是重点!
我的问题是从输入的DAN序列中找DAN序列,使得到所有的序列的总Hanming距离最小。

如果把题目改成这样的基础版,下面是分析过程。

分析:
首先是要处理m个DAN序列的储存,我们可以利用二维数组进行存储(因为二维数组可以看作是很多个一维数组组成。)
其次是如何如何找出最优解。其实就是,第一个序列和剩下的所有的序列进行比较,然后出现不同的字符,……(这个和我们熟悉的选择排序是不一样的,因为选择排序是和它后面的每一个数字进行比较,而这个是和所有的进行比较。)
那么如何储存每个序列总Hamming距离呢?不妨可以放在一个数组中用来存放。
那么如何输出呢?我们需要边存储边记录,设置变量min,若在每一次的比较中,有总HAMMING距离小于min,那么将此赋值给min,并将此时的DAN序列拷贝到字符数组s中。最终输出s即可。

这里需要注意的是,题目要求如有多解,要求为字典序最小的解。所以我们可以试着从最后一个DAN序列开始循环。

#include<stdio.h>
#include<string.h>
int main(void)
{
    char a[50][1000];  //用来存储DAN序列,保证长度足够长
    char s[1000]; //用来存储最优DAN序列
    int b[50]={0}; //记录每个DAN序列的Hamming距离值
    int i=0,k,j;
    int m,n;//m行n列
    scanf("%d%d",&m,&n);
    int min=(m-1)*n; //min一定小于等于(m-1)*n 完成初始化

    for (i=0;i<m;i++)
    scanf("%s",&a[i]);//输入m个DAN序列

    for(k=m-1;k>=0;k--) //从最后一行开始
    {
        for(i=0;i<m;i++)
        {
            for(j=0;j<n;j++)
            {
                if (a[k][j]!=a[i][j])
                b[k]++;
            }
        }
        if(b[k]<=min)
        {
            min=b[k];
            strcpy(s,a[k]);
        }  
          
    }
    //输出
    //输出m个序列的Hamming值
    for (j=0;j<m;j++)
    printf("%d ",b[j]);
    printf("\n");
    //输出最小的DAN序列及对应的值
    printf("%s\n%d",s,min);
    
    return 0;   
}

运行结构如下:
在这里插入图片描述

思考

题目1(必要的存储量):
数组可以用来保存很多数据,但在一些情况下,并不需要把数据保存下来。下面哪些题目可以不借助数组,哪些必须借助数组?请编程实现。假设输入只能读一遍。

  1. 输入一些数,统计个数。
  2. 输入一些数,求最大值、最小值和平均数。
  3. 输入一些数,哪两个数最接近。
  4. 输入一些数,求第二大的值。
  5. 输入一些数,求它们的方差。

1,输入一些数,统计个数。
显然不需要将数据存入数组中,我们只需要设置一个变量作为累加器即可。
如下:

#include <stdio.h>  int main (void) {
    int count=0;
    double x;
    while (scanf("%lf",x)==1)
    count++;
    printf("%d\n",count);  } 
   

2,输入一些数,求最大值、最小值和平均数。

第二个可以利用数组实现,但也可以在循环中实现。

定义变量max,和min用来存放最大值和最小值。假设第一个输入的数字既是最大值也是最小值(即先完成初始化),然后后面每输入一个数,都和最大值和最小值比较,若比最大值大,则将此数赋值给max,对于min同理。

那么如何求平均值呢?可以定义和变量sum,每输入一个数,就将此数加到sum中,然后最后sum除以输入的数的总数即可。

#include<stdio.h> 
int main (void)  
{
    int count=1;
    double max,min,sum,x,ave;
    scanf("%lf",&x);
    min=max=x;
    sum=x;
    while(scanf("%lf",&x)==1)
    {
        count+=1;
        if (x>=max)
        {
            max=x;
        }
        if (x<=min)
        {
            min=x;
        }
        sum+=x;
    }
    ave=sum/count;
    printf("max=%.2lf,min=%.2lf,average=%.2lf\n",max,min,ave);
    return 0;   
} 

3,输入一些数,哪两个数最接近。(假设输入的都是整数)

我的想法是,将输入的数字从小到大排序,然后相邻的两个数之间相减,即可,将差值放到变量min中。利用循环,依次判断两个数的差值,若小于min,将将此差值 赋值给min。

对于数字的排序,可以利用选择排序法和起泡排序法。

#include<stdio.h>
#include<string.h>  int maxn[10000];//保证数组足够大  int main (void)   {
    int k=0,i,x;//x用来存放每次输入的值
    int count=0;//累加器
    int tmp;//设置中间变量
    int min;//存放差值的最小值
    memset(maxn,0,sizeof(maxn));//数组初始化为0;

    //输入一些数字

    while(scanf("%d",&x)==1)
    {
        maxn[k++]=x;
        count++;
    }

    //输入完毕,对输入的数字排序
    //下采用选择法进行排序

    for(i=0;i<count;i++)
    {
        for (k=i+1;k<count;k++)
        {
            if (maxn[k]<maxn[i]) 
            //若后面的小于它,则利用中间变量交换
            {
                tmp=maxn[i];
                maxn[i]=maxn[k];
                maxn[k]=tmp;
            }

        }
    }
    min=maxn[1]-maxn[0];//初始化
    for(i=1;i<count-1;i++)
    {
        if(maxn[i+1]-maxn[i]<min)
        min=maxn[i+1]-maxn[i];
    }

    printf("%d\n",min);
    return 0; 
    } 
    

运行结果:
在这里插入图片描述
4.输入一些数,求第二大的值。
对于这个题目,可以只借助两个变量来实现。一个变量存放当前输入的整数中的最大值,一个变量存放当前输入的整数中的第二大值。

#include<stdio.h>
int main(void)
{
    int maxF,maxS,x;
    scanf("d",&x);
    maxF=maxS=x;//初始化
    while(scanf("%d",&x)==1)
    {
        if(x>maxF)
        {
            maxS=maxF;  //易出错
            maxF=x;1
        }
        else if(x>maxS && x<maxF)
        maxS=x;
    }
    printf("%d\n",maxS);
    return 0;
}

5. 输入一些数,求它们的方差。
求方差,需要先求出来平均值。其次将各项与平均值作差并且平方相加,再除以总数。我们需要利用输入的每个数,所以需要利用数组,将数据保存。

#include <stdio.h>
#include <string.h>
int maxn[1000];//定义足够大的数组
int main (void)
{
    memset(maxn,0,sizeof(maxn));//数组初始化为0
    int x,sum=0,k=0,count=0,i;
    double ave,var=0;//平均值和方差

    //输入一些数
    while(scanf("%d",&x)==1)
    {
        maxn[k++]=x;
        sum+=x;
        count++;
    }
    //计算平均值
    ave=(double)sum/count;//注意强制转换sum
    //计算方差
    for (i=0;i<count;i++)
    {
        var+=(maxn[i]-ave)*(maxn[i]-ave);
    }
    var=var/count;
    
    printf("%.2lf",var);
    return 0;

}

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

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

相关文章

200道面试题(附答案)

最近有不少小伙伴跑来咨询&#xff1a; 想找网络安全工作&#xff0c;应该要怎么进行技术面试准备&#xff1f;工作不到 2 年&#xff0c;想跳槽看下机会&#xff0c;有没有相关的面试题呢&#xff1f; 为了更好地帮助大家高薪就业&#xff0c;今天就给大家分享两份网络安全工…

ubuntu20.04 ffmpeg mp4转AES加密的m3u8分片视频

样本视频(时长2分35秒): 大雄兔_百度百科 大雄兔_百度百科不知大家否看过世界上第一部开源电影&#xff1a;Elephants Dream&#xff08;大象之梦&#xff09;。这是一部由主要由开源软件Blender制作的电影短片&#xff0c;证明了用开源软件也能制作出效果媲美大公司的作品。…

1-9 随机算法【手写+Xmind笔记】

文章目录 1 Min-Cut【手写笔记】1.1 问题描述1.2 解决方案1.3 概率证明 2 赠券收集【手写笔记】3 快排期望【手写笔记】4 素数性质【手写笔记】4.1 基本性质4.2 解决方案4.3 群论4.4 费马小定理4.5 Miller Rabin素性测试 5-6 力矩与偏差【手写笔记】5.1 基础不等式5.2 矩生成函…

[图表]pyecharts模块-柱状图

[图表]pyecharts模块-柱状图 先来看代码&#xff1a; from pyecharts.charts import Bar from pyecharts.faker import Faker from pyecharts.globals import ThemeTypec (Bar({"theme": ThemeType.MACARONS}).add_xaxis(Faker.choose()).add_yaxis("商家A&q…

Spring 核心概念之一 IoC

前言 欢迎来到本篇文章&#xff01;通过上一篇什么是 Spring&#xff1f;为什么学它&#xff1f;的学习&#xff0c;我们知道了 Spring 的基本概念&#xff0c;知道什么是 Spring&#xff0c;以及为什么学习 Spring。今天&#xff0c;这篇就来说说 Spring 中的核心概念之一 Io…

day2 -- 数据库的安全管理和维护

brief 访问控制的目的不仅仅是防止用户的恶意企图。数据梦魇更为常见的是无意识错误的结果&#xff0c;如错打MySQL语句&#xff0c;在不合适的数据库中操作或其他一些用户错误。通过保证用户不能执行他们不应该执行的语句&#xff0c;访问控制有助于避免这些情况的发生。管理…

Makerbase SimpleFOC ESP32 例程6 双电机闭环位置力矩互控

Makerbase SimpleFOC ESP32 例程6 双电机闭环位置力矩互控 第一部分 硬件介绍 1.1 硬件清单 序号品名数量1ESP32 FOC V1.0 主板12YT2804电机2312V电源适配器14USB 线156pin杜邦线2 注意&#xff1a;YT2804是改装的云台无刷电机,带有AS5600编码器&#xff0c;可实现360连续运…

Go 字节跳动—从需求到上线全流程

走进后端开发流程 整个课程会带大家先从理论出发&#xff0c;思考为什么有流程 大家以后工作的团队可能不一样&#xff0c;那么不同的团队也会有不同的流程&#xff0c;这背后的逻辑是什么 然后会带大家按照走一遍从需求到上线的全流程&#xff0c;告诉大家在流程的每个阶段&am…

angular环境安装 (含nodejs详细安装步骤)

在安装本次环境之前&#xff0c;需要先把本机上的nodejs环境卸载&#xff0c;环境变量手动删除&#xff01;安装过程种环境才不会产生副作用&#xff01;实际项目安装的一次记录&#xff0c;踩了太多坑&#xff0c;记录一下&#xff0c;旨在记录&#xff01;项目需要两个不用版…

常用设计模式介绍~~~ Java实现 【概念+案例+代码】

前言 想要读懂源码、让自己的代码写的更加优雅&#xff0c;重构系统等。理解设计模式的思想&#xff0c;可以让我们事半功倍。以下稍微整理了常用的设计模式、每一种设计模式都有详细的概念介绍、案例说明、代码实例、运行截图等。这里给出目录导航。 目录 一、创建型模式 【一…

现在的面试把我卷崩溃了....

现在的面试也太卷了&#xff0c;前几天组了一个软件测试面试的群&#xff0c;没想到效果直接拉满&#xff0c;看来大家对面试这块的需求还是挺迫切的。昨天我就看到群友们发的一些面经&#xff0c;感觉非常有参考价值&#xff0c;于是我就问他还有没有。 结果他给我整理了一份…

Linux命令学习之cd

cd是进入某个目录的命令。man 1 cd看一下cd的使用说明。 发现cd是一个Shell内置命令。内置命令可以使用help 命令行来看一下帮助&#xff0c;比如help cd就可以看一下cd的帮助。 图中的[dir]就是参数&#xff0c;这个参数是目录名&#xff0c;比如可以使用cd /可以进入根目录…

外包派遣3年华为,合同结束转正,转正后工资12k-15k,13薪,包三餐,值得去吗?

“但凡有点机会&#xff0c;千万别去外包! ” 在程序员圈子里面&#xff0c;外包程序员似乎永远处于一个尴尬的角色&#xff0c;如果你说他们不是程序员吧&#xff0c;他们也是程序员。应该说是外包这个词比较尴尬吧。赶着和正式工一样的伙&#xff0c;待遇缺天差地别&#xf…

使用VS2019如何创建Win32的项目?

闲来无事&#xff0c;想学习一下Win32的开发&#xff0c;使用VS2019如何创建Win32的项目&#xff1f;费了老大的劲儿&#xff0c;终于捣鼓出来&#xff0c;现在记录一下。 1 创建新项目&#xff0c;在筛选栏选择C Windows 桌面&#xff0c;如下图&#xff0c;选择第一个“Windo…

由于找不到msvcr90.dll无法继续执行代码的5个修复方法

msvcr90.dll是Microsoft Visual C 2008 Redistributable软件包中的一个库文件&#xff0c;它是用于在Windows操作系统上运行C应用程序的重要文件之一。当我们电脑系统中的msvcr90.dll丢失或者损坏了&#xff0c;就会导致很多软件跟游戏无法打开运行&#xff0c;会提示“由于找不…

Linux文件权限及用户管理

文件权限 在Linux中&#xff0c;每个文件和目录都有一组权限&#xff0c;这些权限决定了哪些用户可以访问文件或目录&#xff0c;以及他们可以进行什么样的操作。权限分为三类&#xff1a; 所有者权限&#xff1a;这些权限适用于文件或目录的所有者。 组权限&#xff1a;这些…

vue+elementui+nodejs毕业设计选题管理系统x7xs6

为了实现对不同角色的分权限管理&#xff0c;从而让各个用户各司其职。学生用户需要登录系统后才能够进行毕设相关文件上传与查看&#xff0c;教师用户需要登录后才能够在线查看毕设相关文件并审核留言等。管理人员需要登录才能够管理各种功能&#xff0c;这三种用户的权限如下…

初阶二叉树的相关性质定理及题目练习

前言&#xff1a; 前面我们介绍了初阶二叉树的相关知识&#xff0c;二叉树常考的还是链式二叉树&#xff0c;而且二叉树也会考很多选择题&#xff0c;本文重点是在给出一些常考的二叉树的性质定理推导和经典练习题目配合强化巩固知识。 目录 一、二叉树的常见性质定理 二、常…

力扣高频SQL50题(基础版)——第四天

力扣高频SQL50题(基础版)——第四天 1 每台机器的进程平均运行时间 1.1 题目内容 1.1.1 基本题目信息1 1.1.2 基本题目信息2 1.1.3 示例输入输出 1.2 示例sql语句 SELECT machine_id,ROUND(SUM(IF(activity_typeend,timestamp,timestamp*-1))/count(distinct process_id),3…

English Learning - L3 作业打卡 Lesson4 Day26 2023.5.30 周二

English Learning - L3 作业打卡 Lesson4 Day26 2023.5.30 周二 引言&#x1f349;句1: It is easy to find my husband in a crowd.成分划分弱读连读语调 &#x1f349;句2: He stands almost two meters tall.成分划分爆破语调 &#x1f349;句3: He is a tall drink of wate…