2023/6/14总结

JS的学习:

JavaScript是一种运行在客户端(浏览器)的编程语言,实现人机交互的效果

主要作用:

  • 网页特效
  • 表单验证
  • 数据交互

JS的组成

ECMAScript

规定了js基础的语法核心知识

Web APIs

DOM:操作文档,对页面元素进行移动、大小、添加删除操作。

BOM:操作浏览器,比如页面弹窗、检测窗口宽度、存储数据到浏览器。

JS引用方式:(在body标签里面)

JS输出语句:

输入语句:

 

console.log 控制台输出 

需要注意的是:alert()和prompt()会跳过页面渲染先被执行。

 JS声明变量

let 变量名称

声明数组:

let 数组名=[数据1,数据2……数据n]

拼接字符串和变量

JS类型转换:

  • 隐式转换

+号俩边只要有一个是字符串,都会变成字符串   +号作为正号解析可以转换成数字类型

- * /都会把数据变成数字类型

  • 显示转换:

Number(数据)

转换成数字类型

如果字符串里面有非数字,则结果为NaN

NaN是number的一种,代表非数字

parseInt(数据)转换为整型

parseFloat(数据)转换为浮点型

==只要值相等,就会返回true

而===需要数据类型和值一样的都相等才能返回true

开发中,判断是否相等,用的是===

关于JavaScript的一个案例:

2023-06-14 01-13-33-214

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="CSS/demo0612.css">
    <title>demo0612</title>
</head>
<body>

    <script>
        let num=[];
        for(let i=1; i <= 4;i ++)
        {
            num[i]=+prompt(`请输入第${i}季度的数据:`);
        }
        document.write(`<div class="xy">`)
        for(let i = 1;i <= 4; i ++)
        {
            document.write(
            `<div class="y" style="height:${num[i]}px">
            <span>${num[i]}</span>
            <h4>第${i}季度</h4>
            </div>`
            )
        }
        document.writer(`</div>`)
    </script>
</body>
</html>
.xy
{

    display:flex;
    align-items:flex-end;
    text-align:center;
    width:500px;
    height:500px;
    margin:10px auto;
    border-left:2px solid #ccc;
    border-bottom:2px solid #ccc;
}
.y
{
    margin:0px 20px 0 20px;
    display:flex;
    width:80px;
    background-color:pink;
    flex-direction:column;
    justify-content:space-between;
}
.y h4
{
    margin-bottom:-35px;
}
.y span
{
    margin-top:-20px;
}

函数:

function 函数名称()

{

        语句

}

调用和c语言一模一样——函数名称()

匿名函数

  • 函数表达式:

fn=function();   这个里面没有函数名称,调用的时候是fn()  

  • 立即执行函数

(function(){})()

(funtion(){}())

对象:

 增加对象属性:

删除对象属性 

 查找:

定义方法:

 遍历对象的属性:

遍历对象数组:

 JavaScript内置对象-Math

大部分和c的差不多,需要注意下面这俩个不一样的

  • cell  向上取整
  • floor  向下取整

在JavaScript中,const修饰的基本数据类型是不可以改变的,修饰的对象数据类型地址不变,就可以改变。

 DOM

DOM是文档对象类型,是用来呈现以及与任意HTML或者XML文档交互的API(就是浏览器提供的一套专么用来操作网页内容的功能

DOM作用:开发网站内容特效和实现用户交互。

DOM树

  • 将HTML文档以树状结构直观的表现出来,我们称之为文档或者DOM树
  • 描述网页内容关系的名词

作用:直观的体现了标签与标签之间的关系

DOM对象

  • 浏览器根据html标签生成的js对象
  • 所有的标签属性都可以在这个对象上面找到,修改这个对象的属性会自动映射到标签身上

DOM的核心思想:把网页内容当作对象来处理

DOM里面最大的对象是document,所有document提供的属性和方法是用来访问和操作网页内容的

网页所有的内容都在document里面。

获取DOM元素

  • 借助css选择器:

document.querySelector('CSS选择器')   必须要加引号,否则会当成变量

每次选择的都是第一个,没有就是null

document.querySelectorAll('CSS选择器')  返回的是一个集合

 题解:

第二周任务 [Cloned] - Virtual Judge (vjudge.net)

这道题 其实可以把这个看成一个循环的数组

每次都执行一种操作:

把第一行放到最后一行,其他的往上移动

把第一列放到最后一列,其他的往就移动

 然后就能通过求余就能对应上对应的列

#include<stdio.h>
#define Maxsize 35
char a[Maxsize][Maxsize],b[Maxsize][Maxsize];
int main()
{
	int n,m,i,j,tx,ty,x,y,flag=0;
	scanf("%d%d",&n,&m);
	for(i=0;i<n;i++)
	{
		scanf("%s",a[i]);
	}
	for(i=0;i<n;i++)
	{
		scanf("%s",b[i]);
	}
	flag=0;
	for(i=0;i<n;i++)
	{
		for(j=0;j<m;j++)
		{
			flag=1;
			for(x=0;x<n;x++)
			{
				for(y=0;y<m;y++)
				{
					tx=(x+i)%n;
					ty=(y+j)%m;
					if(a[tx][ty]!=b[x][y])
					{
						flag=0;
					}
				}
			}
			if(flag) break;
		}
		if(flag) break;
	}
	if(flag) puts("Yes");
	else puts("No");
	return 0;
}

第二周任务 [Cloned] - Virtual Judge (vjudge.net)

这是一题dfs题目,就判断四个方向的是否都是#就可以了。

#include<stdio.h>
#define Maxsize 110
char a[Maxsize][Maxsize];
int next[4][2]={-1,-1,1,-1,-1,1,1,1},n,m;
int is(int x,int y)
{
	int i,j,k,tx,ty;
	if(a[x][y]!='#') return 0;
	for(k=1;;k++)
	{
		for(i=0;i<4;i++)
		{
			tx=x+k*next[i][0];
			ty=y+k*next[i][1];
			if(tx<0||ty<0||tx>=n||ty>=m) return k-1;
			if(a[tx][ty]!='#') return k-1;
		}
	}
	return n>m?m:n;
}
int main()
{
	int i,j,b[Maxsize]={0},k,r;
	int tx,ty;
	scanf("%d%d",&n,&m);
	for(i=0;i<n;i++)
	{
		scanf("%s",a[i]);
	
	}
	r=n>m?m:n;
	//第一个数字是min(n,m)
	//后面的数字代表0-n的×个数
	for(i=0;i<n;i++)
	{
		for(j=0;j<m;j++)
		{
			b[is(i,j)]++;
		}
	}
	for(i=1;i<=r;i++)
	{
		printf("%d ",b[i]);
	}
	return 0;
}

第二周任务 [Cloned] - Virtual Judge (vjudge.net)

这个题目是一个简单的二分的题目

题目大意是一个字符串都是由01组成,前面全部都是0 ,后面全部都是1,找到0 变成1的那个中介点。

#include<stdio.h>
#define Maxsize 200010
int a[Maxsize];
int main()
{
	int n,i,l,r,m,x;
	scanf("%d",&n);
	l=1,r=n;
	for(i=2;i<n;i++)
	{
		a[i]=-1;
	}
	a[1]=0;
	a[n]=1;
	//第1位是0  最后一位是1
	//二分查找
	while(l<=r)
	{
		m=(l+r)/2;
		printf("? %d\n",m);
		fflush(stdout);
		scanf("%d",&x);
		a[m]=x;
		if(a[m]==0)
		{
			//
			if(a[m+1]==1)
			{
				printf("! %d\n",m);
				return 0;
			}
			else 
			{
				l=m+1;
			}
		}
		else if(a[m]==1)
		{
			if(a[m-1]==0)
			{
				printf("! %d\n",m-1);
				return 0;
			}
			else 
			{
				r=m-1;
			}
		}
	}
	return 0;
}

 第二周任务 [Cloned] - Virtual Judge (vjudge.net)

这个题目的大致意思是 找到最长的连续是o的字串,-ooooo算,ooooo-也算

#include<stdio.h>
#define Maxsize 200100
int MAX(int a,int b)
{
	if(a>b) return a;
	return b;
}
int main()
{
	int n,i,j=0,res=-1;
	char str[Maxsize]={0};
	scanf("%d",&n);
	scanf("%s",str);
	
	for(i=0;i<n;)
	{
		while(i<n&&str[i]=='o') i++;
		if(str[j]=='-') 
		{
			if(j!=i) res=MAX(res,i-j-1);
		}
		else if(i<n&&str[i]=='-')
		{
			if(j!=i) res=MAX(res,i-j);
		}
		while(i<n&&str[i]=='-') i++;
		j=i-1;
	}
	
	printf("%d\n",res);
	return 0;
}

第二周任务 [Cloned] - Virtual Judge (vjudge.net)

这个题目是根据所给的信息构成一个数字,删掉第一个开头的数字,或者添加一位数字在后面,或者查看这个数字。

我们可以用数组去构造一个队列去存储各位数字。另外一个数字存储10、100、100这样的数字,但是需要先求余,不然最后数字会很大,记录这些数字只是为了好操作对于删除第一位数字,到时候只需要用res-对应的位数所指向的10的n次幂就可以了,需要注意的是  十年OI一场空,不开long long见祖宗。

#include<stdio.h>
#include<math.h>
#define Maxsize 600010
#define MOD 998244353
long long a[Maxsize]={0},b[Maxsize]={0};
int main()
{
	long long t,i,choose;
	long long res=1,l=0,r=1;
	a[0]=1;b[0]=1;
	for(i=1;i<Maxsize;i++)
	{
		a[i]=a[i-1]*10%MOD;
	}
	scanf("%lld",&t);
	while(t--)
	{
		scanf("%lld",&choose);
		if(choose==1)
		{
			scanf("%lld",&i);
			res=(res*10+i)%MOD;
			b[r++]=i;
		//	printf("1--%lld\n",res);
		}
		else if(choose==2)
		{
			res=((res-a[r-l-1]*b[l])%MOD+MOD)%MOD;
		//	printf("2--%lld\n",res);
			l++;
		}
		else if(choose==3)
		{
			printf("%lld\n",res);
		}
	}
	return 0;
}

第二周任务 [Cloned] - Virtual Judge (vjudge.net)

这道题我刚开始想的是直接输出n*n(如果满足的话)

但是最后一个案例过不了,估计是被卡了。

这道题必须要求对应的最小的大于等于M的一个合数,因此就转化成需要找到俩个数字

需要满足俩个条件:a<=b,a*b>=m 

那么就可以直接穷举,我们从1-n/2,去穷举a的值,就能推出b的值,那m去除以a,如果有余数就b=m/a+1,然后用res比较得出最小值即可。

#include<stdio.h>
#include<math.h>
#define INF 2e18
unsigned long long MIN(unsigned long long a,unsigned long long b)
{
	if(a<b) return a;
	return b;
}
int main()
{
	unsigned long long n,m,i,j,res=INF;
	scanf("%llu%llu",&n,&m);
	//1-n的数字要表示至少m
	if(n*n<m)
	{
		puts("-1");
	}
	else 
	{
		//
		for(i=1;i<=n;i++)
		{
			//直接暴力枚举,算出j的取值
			//j=(m+i-1)/i,是为了刚好取到最小值
			j=(m+i-1)/i;
			if(j<=n) res=MIN(res,i*j);
			if(i>j) break;
		}
		if(res==INF) puts("-1");
		else printf("%llu\n",res);
	}
	return 0;
}

第二周任务 [Cloned] - Virtual Judge (vjudge.net)

 这道题用set很容易就做出来了

#include<stdio.h>
#include<set>
#define Maxsize 200010

using namespace std;

set<int> myset;

int a[Maxsize];
int main()
{
	int n,m;
	int i;
	scanf("%d%d",&n,&m);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
		myset.insert(a[i]);
	}
	for(i=0;i<n;i++)
	{
		if(myset.count(a[i]+m))
		{
			puts("Yes");
			return 0;
		}
	}
	puts("No");
	return 0;
}

第二周任务 [Cloned] - Virtual Judge (vjudge.net)

 这道题其实是一个计算

计算所有的区间和x值,然后看区间是否对的上,根据区间去计算即可

#include<stdio.h>
#define N 100010
struct node
{
	long long x;
	long long count;
}a[N][2];
int main()
{
	long long l,n1,n2,i,x,y,j,sum,max;
	scanf("%lld%lld%lld",&l,&n1,&n2);
	for(i=1;i<=n1;i++)
	{
		scanf("%lld %lld",&a[i][0].x,&a[i][0].count);
		a[i][0].count+=a[i-1][0].count;
	}
	for(i=1;i<=n2;i++)
	{
		scanf("%lld %lld",&a[i][1].x,&a[i][1].count);
		a[i][1].count+=a[i-1][1].count;
	}
	sum=0;
	for(i=1,j=1;i<=n1&&j<=n2;)
	{
		if(a[i][0].x==a[j][1].x)
		{
			if(a[i][0].count<a[j][1].count&&a[j-1][1].count<a[i][0].count)
			{
				if(a[j-1][1].count>a[i-1][0].count)
				{
					max=a[j-1][1].count;
				}
				else max=a[i-1][0].count;
				
				sum+=a[i][0].count-max;
				i++;
			}
			else if(a[i][0].count>=a[j][1].count&&a[j][1].count>a[i-1][0].count)
			{
				if(a[j-1][1].count>a[i-1][0].count)
				{
					max=a[j-1][1].count;
				}
				else max=a[i-1][0].count;
				
				sum+=a[j][1].count-max;
				j++;
			}
			else if(a[i][0].count<a[j][1].count)
			{
				i++;
			}
			else if(a[i][0].count>=a[j][1].count)
			{
				j++;
			}
		}
		else if(a[i][0].count<a[j][1].count)
		{
			i++;
		}
		else if(a[i][0].count>a[j][1].count) j++;
		else 
		{
			i++,j++;
		}
	}
	printf("%lld\n",sum);
}

第二周任务 [Cloned] - Virtual Judge (vjudge.net)

这是一个遍历的题目,直接遍历即可

#include<stdio.h>
#define N 500010
int a[N]={0};
int main()
{
	int n,t,i,x,y,j;
	int p,q;
	p=q=1;
	scanf("%d%d",&n,&t);
	for(i=1;i<=t;i++)
	{
		scanf("%d",&x);
		if(x==2)
		{
			scanf("%d",&y);
			a[y]=-1;
		}
		else 
		{
			if(x==1)
			{
				a[p]=1;
				p++;
			}
			else if(x==3)
			{
				while(a[q]==-1)
				{
					q++;
				}
				printf("%d\n",q);
			}
		}
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值