JavaScript是一种运行在客户端(浏览器)的编程语言,实现人机交互的效果
主要作用:
- 网页特效
- 表单验证
- 数据交互
规定了js基础的语法核心知识
DOM:操作文档,对页面元素进行移动、大小、添加删除操作。
BOM:操作浏览器,比如页面弹窗、检测窗口宽度、存储数据到浏览器。
需要注意的是:alert()和prompt()会跳过页面渲染先被执行。
let 变量名称
let 数组名=[数据1,数据2……数据n]
+号俩边只要有一个是字符串,都会变成字符串 +号作为正号解析可以转换成数字类型
- * /都会把数据变成数字类型
Number(数据)
转换成数字类型
如果字符串里面有非数字,则结果为NaN
NaN是number的一种,代表非数字
parseInt(数据)转换为整型
parseFloat(数据)转换为浮点型
==只要值相等,就会返回true
而===需要数据类型和值一样的都相等才能返回true
开发中,判断是否相等,用的是===
关于JavaScript的一个案例:
2023-06-14 01-13-33-214
demo0612
.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(){}())
大部分和c的差不多,需要注意下面这俩个不一样的
在JavaScript中,const修饰的基本数据类型是不可以改变的,修饰的对象数据类型地址不变,就可以改变。
DOM是文档对象类型,是用来呈现以及与任意HTML或者XML文档交互的API(就是浏览器提供的一套专么用来操作网页内容的功能)
DOM作用:开发网站内容特效和实现用户交互。
作用:直观的体现了标签与标签之间的关系。
DOM的核心思想:把网页内容当作对象来处理
DOM里面最大的对象是document,所有document提供的属性和方法是用来访问和操作网页内容的
网页所有的内容都在document里面。
document.querySelector('CSS选择器') 必须要加引号,否则会当成变量
每次选择的都是第一个,没有就是null
document.querySelectorAll('CSS选择器') 返回的是一个集合
第二周任务 [Cloned] - Virtual Judge (vjudge.net)
这道题 其实可以把这个看成一个循环的数组
每次都执行一种操作:
把第一行放到最后一行,其他的往上移动
把第一列放到最后一列,其他的往就移动
然后就能通过求余就能对应上对应的列
#include
#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
第二周任务 [Cloned] - Virtual Judge (vjudge.net)
这是一题dfs题目,就判断四个方向的是否都是#就可以了。
#include
#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;im?m:n;
//第一个数字是min(n,m)
//后面的数字代表0-n的×个数
for(i=0;i
第二周任务 [Cloned] - Virtual Judge (vjudge.net)
这个题目是一个简单的二分的题目
题目大意是一个字符串都是由01组成,前面全部都是0 ,后面全部都是1,找到0 变成1的那个中介点。
#include
#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
第二周任务 [Cloned] - Virtual Judge (vjudge.net)
这个题目的大致意思是 找到最长的连续是o的字串,-ooooo算,ooooo-也算
#include
#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
第二周任务 [Cloned] - Virtual Judge (vjudge.net)
这个题目是根据所给的信息构成一个数字,删掉第一个开头的数字,或者添加一位数字在后面,或者查看这个数字。
我们可以用数组去构造一个队列去存储各位数字。另外一个数字存储10、100、100这样的数字,但是需要先求余,不然最后数字会很大,记录这些数字只是为了好操作对于删除第一位数字,到时候只需要用res-对应的位数所指向的10的n次幂就可以了,需要注意的是 十年OI一场空,不开long long见祖宗。
#include
#include
#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
第二周任务 [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
#include
#define INF 2e18
unsigned long long MIN(unsigned long long a,unsigned long long b)
{
if(aj) break;
}
if(res==INF) puts("-1");
else printf("%llu\n",res);
}
return 0;
}
第二周任务 [Cloned] - Virtual Judge (vjudge.net)
这道题用set很容易就做出来了
#include
#include
#define Maxsize 200010
using namespace std;
set myset;
int a[Maxsize];
int main()
{
int n,m;
int i;
scanf("%d%d",&n,&m);
for(i=0;i
第二周任务 [Cloned] - Virtual Judge (vjudge.net)
这道题其实是一个计算
计算所有的区间和x值,然后看区间是否对的上,根据区间去计算即可
#include
#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].counta[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)
{
j++;
}
}
else if(a[i][0].counta[j][1].count) j++;
else
{
i++,j++;
}
}
printf("%lld\n",sum);
}
第二周任务 [Cloned] - Virtual Judge (vjudge.net)
这是一个遍历的题目,直接遍历即可
#include
#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;
}