今日总结
一、JAVA学习–面向对象
1.面向对象的本质:以类的方式组织代码,以对象的方式组织数据。
2.面向过程和面向对象的区别:前者事物比较简单,可用线性思维解决,后者事物比较复杂,无法用线性思维解决。
3.对象和类的关系:特殊到一般,具体到抽象。
4:定义类:
【修饰符】class 类名
{
零个到多个构造体定义
零个到多个成员变量
零个到多个方法
}
修饰符可以为public,final,abstract
例如:
public class stu
{
string name;
int age;
string sex;
int num;
public void fun()
{
System.out.println(name+"是学生");
}
public static void main()
{
stu s1=new stu();
s1.name="lunar";
s1.fun();
}
}
5.类的属性:属性作用范围是整个类体。在定义成员变量时可以对其初始化,如果不对其初始化,JAVA使用默认的值对其初始化。(数值:0;char:\u0000,boolean:false;所有引用类型:null)
6.内存分析:
(1)栈:存放局部变量
(2)堆存放new出来的对象以及方法区(类的信息,static变量,常量池等)
7.面向对象中,整个程序的基本单位是类,方法是从属于类的。
8.JAVA中方法参数传递是:值传递。
二、题解
1.B
1.链接:https://vjudge.net/contest/446142#problem/B
2.题解:当车辆数量不为0时,输入车辆编号,当第一个车辆编号不为0时,接着输入剩下车辆编号,此时定义栈,q表示车辆入栈的顺序,运用循环当车辆入栈编号小于等于出栈编号时,将该车辆编号入栈,q++,当出栈车辆编号等于栈顶元素时,出栈,最后判断栈是否为空,当栈为空时,输出Yes,否则输出No。
3.代码:
#include <iostream>
#include <stack>
#include <cstdio>
using namespace std;
int z[1100];
int main()
{
int i,n;
while(cin>>n)
{
if(n==0) break;
while(cin>>z[1])
{
int q=1;
stack <int> sta;
if(z[1]==0) {cout<<endl;break;}
else
{
for(i=2;i<=n;i++) cin>>z[i];
}
for(i=1;i<=n;i++)
{
while(q<=z[i])
{
sta.push(q);
q++;
}
if(z[i]==sta.top())
{
sta.pop();
}
}
if(sta.size()==0) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}
}
2.M
1.链接:https://vjudge.net/contest/446142#problem/M
2.题解:(题目大意)多组输入一个整数求该整数的倍数,且得到的数是十进制并只包含数字0和1。
当该整数不为0时,进行深度搜索,其中m表示得到的结果的位数,n表示得到的结果,flag表示是否找到合适的数,当n为z的倍数时,将标记改为1,输出该数,否则运用递归再次进行深搜直至找到合适的数为止(一种是当前数乘10,另一种是当前数乘10加1)。
注:运用广搜会超时。
3.代码:
#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
int flag;
void dfs(int z,int m,long long int n)
{
if(m>19||flag==1) return;
if(n%z==0)
{
flag=1;
cout<<n<<endl;
return;
}
dfs(z,m+1,n*10);
dfs(z,m+1,n*10+1);
}
int main()
{
int z;
while(cin>>z)
{
if(z==0) break;
flag=0;
dfs(z,1,1);
}
}