MySQL的初步学习,java面向对象综合练习,atc补题,cf补题

目录

MySQL

DDL——数据库操作

DDL——表操作——查询

 DDL——表操作——创建

数据类型 

DDL——表操作——添加字段

DDL——表操作——修改

DDL——表操作——删除

DML——添加

​编辑

DML——修改

DML——删除

Java

面向对象

一,乔打鸠

二,存储三个商品对象

三,键盘录入三个汽车对象

atc

B - Bombs

D - Three Days Ago

cf

Problem - B - Codeforces

Problem - C - Codeforces

Problem - D - Codeforces


MySQL

DDL——数据库操作

 示例如下:

注意:我开始一直出不来东西,我以为是我安装出了什么问题,后来发现是因为我没有打“”,它的每一条语句都是以“;”结尾。 

DDL——表操作——查询

 DDL——表操作——创建

 示例如下:

mysql> create table tb_user(
    -> id int,
    -> name char(50),
    -> age int,
    -> gender char(1)
    -> );

 结果如下:

注意:符号都是英文符号。 

数据类型 

 示例如下:

mysql> create table emp(
    -> id int,
    -> workno char(10),
    -> name char(10),
    -> gender char(1),
    -> age int,
    -> idcard char(18),
    -> entrydate date
    -> );

结果如下:

DDL——表操作——添加字段

示例如下:

mysql> alter table emp add nickname char(20);

DDL——表操作——修改

示例如下:

mysql> alter table emp change nickname username char(30);

  示例如下:

mysql> alter table emp rename to emppp;

DDL——表操作——删除

 示例如下:

mysql> alter table emp drop username;

示例如下:

mysql> drop table tb_user;

 注意:在删除表的时候,表中的数据也会被全部删除。

DML——添加

示例代码如下:

mysql> insert into emppp(id) values(2);

 运行结果如下:

 注意:在我目前使用的程序中,得刷新才能出来上面的数据。

DML——修改

注意:条件也可以没有,如果没有就是修改整张表的指定的字段。 

示例代码如下:

mysql> update emppp set gender='n',age=21 where id=2;

运行结果如下:

 

DML——删除

 示例代码如下:

mysql> delete from emppp where id=1;

运行结果如下:

 

Java

面向对象

一,乔打鸠

分析:

首先搞个javaBean,有set有get,然后设置方法,“谁打谁”,“打了多少血量”,“是否KO”等,代码如下:

javaBean

import java.util.Random;

public class Role {
    private String name;
    private int blood;

    public Role() {
    }

    public Role(String name, int blood) {
        this.name = name;
        this.blood = blood;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return blood
     */
    public int getBlood() {
        return blood;
    }

    /**
     * 设置
     * @param blood
     */
    public void setBlood(int blood) {
        this.blood = blood;
    }
    /**
     * 定义一个方法攻击别人
     */
    public  void attAck(Role role){
        Random r=new Random();
        int hurt=r.nextInt(20)+1;
        int reBoold=role.getBlood()-hurt;
        if(reBoold<0)
            reBoold=0;
        role.setBlood(reBoold);
        System.out.println(this.getName()+"打了一下"+role.getName()+",造成了"+hurt+"点伤害"+role.getName()+"还剩下"+reBoold+"点血量");
    }
}

主函数: 

public class Main {
    public static void main(String[] args) {
        Role r1=new Role("乔",100);
        Role r2=new Role("鸠",100);
        while(true){
            r1.attAck(r2);
            if(r2.getBlood()==0) {
                System.out.println(r1.getName() + "KO" + r2.getName());
                break;
            }
            r2.attAck(r1);
            if(r1.getBlood()==0) {
                System.out.println(r2.getName() + "KO" + r1.getName());
                break;
            }
        }
    }
}

因为采取了随机函数,所以结果是随机的。

二,存储三个商品对象

分析:使用javaBean定义成员变量,然后使用set,get得到或者返回成员变量的值,在主函数中对三个商品赋值且调用定义好的javaBean得到输出。

javaBean如下:

public class Goods {
    private String id;
    private String name;
    private double price;
    private int count;

    public Goods() {
    }

    public Goods(String id, String name, double price, int count) {
        this.id = id;
        this.name = name;
        this.price = price;
        this.count = count;
    }

    /**
     * 获取
     * @return id
     */
    public String getId() {
        return id;
    }

    /**
     * 设置
     * @param id
     */
    public void setId(String id) {
        this.id = id;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return price
     */
    public double getPrice() {
        return price;
    }

    /**
     * 设置
     * @param price
     */
    public void setPrice(double price) {
        this.price = price;
    }

    /**
     * 获取
     * @return count
     */
    public int getCount() {
        return count;
    }

    /**
     * 设置
     * @param count
     */
    public void setCount(int count) {
        this.count = count;
    }
}
public class Main {
    public static void main(String[] args) {
        Goods[] arr=new Goods[3];
        Goods g1=new Goods("001","华为p40",5999,100);
        Goods g2=new Goods("002","小米p40",3999,50);
        Goods g3=new Goods("003","苹果p40",10999,70);
        arr[0]=g1;
        arr[1]=g2;
        arr[2]=g3;
        for (int i = 0; i < arr.length; i++) {
            Goods goods= arr[i];
            System.out.println(goods.getId()+":"+goods.getName()+"售价:"+goods.getPrice()+"只剩:"+goods.getCount());
        }
    }
}

运行结果如下:

 

三,键盘录入三个汽车对象

分析:先写一个javaBean录入汽车的信息和输出汽车的信息,在主函数中调用录入使用键盘输入,然后再遍历输出。

代码如下:

public class Test1 {
   private String pp;
    private int price;
    private String ys;

    public Test1() {
    }

    public Test1(String pp, int price, String ys) {
        this.pp = pp;
        this.price = price;
        this.ys = ys;
    }

    /**
     * 获取
     * @return pp
     */
    public String getPp() {
        return pp;
    }

    /**
     * 设置
     * @param pp
     */
    public void setPp(String pp) {
        this.pp = pp;
    }

    /**
     * 获取
     * @return price
     */
    public int getPrice() {
        return price;
    }

    /**
     * 设置
     * @param price
     */
    public void setPrice(int price) {
        this.price = price;
    }

    /**
     * 获取
     * @return ys
     */
    public String getYs() {
        return ys;
    }

    /**
     * 设置
     * @param ys
     */
    public void setYs(String ys) {
        this.ys = ys;
    }
}
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Test1[] che=new Test1[3];
        Scanner sc=new Scanner(System.in);
        for(int i=0;i< che.length;i++){
            Test1 c=new Test1();
            String brand=sc.next();
            c.setPp(brand);
            int pri=sc.nextInt();
            c.setPrice(pri);;
            String color=sc.next();
            c.setYs(color);
            che[i]=c;
        }
        for(int i=0;i<3;i++)
        {
            Test1 tt=che[i];
            System.out.println(tt.getPp()+":"+tt.getPrice()+":"+tt.getYs());
        }
    }
}

注意:

这个新建对象一定要放在循环里面,每次都新建一个对象,才有三个对象,不然一直就只有一个对象。 

总结:

面对对象到这里可以说是有了一个小小的收官,java吧,你说它难,它也不难,语法什么的和c差得不多,你说它不难,它要学的东西和要注意的东西又比c多,c是什么都没有给你,你自己造作去,java是什么都给你了,但是你得能用会用,就还是多练多打吧,什么东西学了之后都还是得去用,实践才能知道且体会到细节。

atc

B - Bombs

分析:

首先了解一下曼哈顿距离,下面要用到的。

分析:对于这个题,我最开始想到的是深搜,但是当时我处理起来有点问题,后来干脆就用了模拟,直接模拟它那个状态,满足曼哈顿距离就标记,然后标记的位置都变成‘.’,最后输出就行。

代码如下:

#include<stdio.h>
#include<math.h>
#include<string.h>
int r,c;
char a[21][21];
int b[21][21];
int main()
{
	scanf("%d%d",&r,&c);
	for(int i=1;i<=r;i++)
	scanf("%s",a[i]+1);
	for(int i=1;i<=r;i++)
	{
		for(int j=1;j<=c;j++)
		{
			if(a[i][j]>='1'&&a[i][j]<='9')
			{
				int k=a[i][j]-'0';
			   for(int kk=1;kk<=r;kk++)
			   for(int kkk=1;kkk<=c;kkk++)
		        if(abs(kk-i)+abs(kkk-j)<=k) 
				b[kk][kkk] = 1;
			}
		}
	};
	for(int i=1;i<=r;i++)
	for(int j=1;j<=c;j++)
	if(b[i][j])
	a[i][j]='.';
	
	for(int i=1;i<=r;i++)
	printf("%s\n",a[i]+1);
}

D - Three Days Ago

分析:这个题它其实有点用到状压,我其实本来是打算模拟的,但是数有点多,模拟下来可能会爆,所以就接触了这个状压,它本质是异或前缀和,先把每个数都变成二进制,然后再异或它之前的异或前缀和,只要两个遇到一模一样的两个字符串,那么一头一尾的数字就是相等的,直接加就行。

代码如下:

#include <bits/stdc++.h>
#include<stdio.h>
#include<math.h>
#include<string.h>
using namespace std;
long long aa[500005];
map<int,int> mp;
int main()
{   
	char a[500005]={0};
	scanf("%s",a);
	long long len=strlen(a);
	aa[0]=1<<(a[0]-'0');
	for(long long i=1;i<len;i++)
	{
		long long b=a[i]-'0';
		long long c=1<<b;
		aa[i]=aa[i-1]^c;
	}
	//for(int i=0;i<len;i++)
	//printf("%d  ",aa[i]);
	long long sum=0;
	mp[0]++;
	for(long long i=0;i<len;i++)
	{
		sum+=mp[aa[i]]; 
		mp[aa[i]]++;
	}
	printf("%lld",sum);
}

主要代码:

aa[0]=1<<(a[0]-'0');
	for(long long i=1;i<len;i++)
	{
		long long b=a[i]-'0';
		long long c=1<<b;
		aa[i]=aa[i-1]^c;
	}

注意:数组开大点,用 long long,我用int卡了我四五次。

cf

Problem - B - Codeforces

分析:这个题我一开始是用c写的,但是会爆内存,就又得感叹一句C++真香,首先我们先认识一个玩意,set<类型> 变量  这啥意思呢?就是说我创建一个动态数组,注意啊,这已经是个一维数组了,然后它插入的数据都是升序排序,且不会插入同样的数据,它内部采用的排序是插入排序。那么对于这个题来讲,它有什么作用呢?那它的作用可就太大了,这玩意儿还有一个查找功能,可以把相同的数给找出来那就是find(x),然后和end()比较就可以判断这一组数据里面有没有x。这个题主要是就是从最后一组数据往前面找,那么用set这个玩意儿就方便很多很多。

代码如下:

#include <bits/stdc++.h>
#include<stdio.h>
#include<math.h>
#include<string.h>
using namespace std;
int t,m,n;
set<int> a[50001],b; 
int aa[50001];
int main()
{  
	scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&m);
        for(int i=1;i<=m;i++)
        {
            a[i].clear();
            scanf("%d",&n);
            for(int j=1;j<=n;j++)
            {
                int k;
                scanf("%d",&k);
                a[i].insert(k);
            }
        }
    //    for(int i=1;i<=m;i++)
    //    {
    //     for(set<int>::iterator tt=a[i].begin();tt!=a[i].end();tt++)
    //     printf("%d  ",*tt);
    //     printf("\n");
    //    }
    int jh=1;
    b.clear();
    for(int i=m;i>0;i--)
    {
        int f=0;
        for(set<int>::iterator tt=a[i].begin();tt!=a[i].end();tt++)
        {
            if(b.find(*tt)==b.end())
            {
                f=1;
                aa[i]=*tt;
            }
            b.insert(*tt);
        }
        if(!f)
        {
            jh=0;
            printf("-1");
            break;
        }
    }
    if(jh)
    for(int i=1;i<=m;i++)
    printf("%d ",aa[i]);
    printf("\n");
    }
}

Problem - C - Codeforces

分析:这个我最开始的想法是i个和第i+1个判断,然后计算出能够存在的一袋糖果最大的数,然后接下去判断,但是不行,我试过一种特殊情况,它就是错的,然后就有了另一种方法的出现:即使糖果被分开装,但是它的总价一直都是一样的,就比如说一大袋糖果20个,一个3块钱(真黑心),无论是把它分成4个一袋还是5个一袋,它的总价都只能是60,至于它几个一袋,只要满足总个数取余袋数得0就行,那么怎么满足c[i]==c[i+1]呢?把两大袋糖果的总价求最大公约数,就可以得到它c[i]的目前的最大的那个数,然后求两大袋糖果单价之间的最小公倍数,这就得出来目前它d[i]的数量,那也就是说要满足下面这个条件才能满足接下来的一袋c[i]==c[i+1]:  (a[i]*b[i]和前面得出最大公约数所得出的最大公约数)%(b[i]和前面得出的最小公倍数所得出的最小公倍数)==0。

代码如下:

#include <bits/stdc++.h>
#include<stdio.h>
#include<math.h>
#include<string.h>
using namespace std;
int t;
int n;
long long a[200001],b[200001];
long long zd,zx;

long long zdgy(long long aa,long long bb)
{
    if(aa<bb)
    {
        long long cc=aa;
        aa=bb;
        bb=cc;
    }
    while(bb)
    {
        long long cc=aa%bb;
        aa=bb;
        bb=cc;
    }
    return aa;
}

int main()
{  
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        for(int i=0;i<n;i++)
        {
            scanf("%lld%lld",a+i,b+i);
        }
        zd=a[0]*b[0];
        zx=b[0];
        int sum=0;
        for(int i=0;i<n;i++)
        {
            zd=zdgy(a[i]*b[i],zd);
            zx=(b[i]*zx)/zdgy(b[i],zx);
            if(zd%zx)
            {
                sum++;
                zd=a[i]*b[i];
                zx=b[i];
            }
        }
        printf("%d\n",sum+1);
    }
}

Problem - D - Codeforces

分析:我觉得这个题目是给我钻了空子,我想得很简单,首先它总数据之和为0,那也就是说它的最大值减去最小值一定是一个正整数且这个正整数大于最大值,那也就是说我只要随时保证我的前缀和在0附近就行,那它什么时候输出"No"呢?只有都为0的情况(其实这个我是猜的,毕竟那么多示例数据,只有都是0的时候才输出“No”),那就把它分成两部分,正数和负数,然后如果前缀和小于或者等于0,那就放一个正数,如果大于0,那就放一个负数,那0呢?0提前放到输出的数组里面,也就是放在输出的数组的最前面,因为0在中间会影响结果,但是如果你把0全部挑出来然后放在最后面输出也可以,但是没有必要,直接在输入的时候放一下就行。

代码如下:

#include <bits/stdc++.h>
#include<stdio.h>
#include<math.h>
#include<string.h>
using namespace std;
int t;
int n;
int a[300002],b[300002],ab[300002];
int minn,maxx;
long long sum,he;
int  main()
{
    scanf("%d",&t);
    while(t--)
    {
        sum=0;
        minn=1000000007;
        maxx=-1000000007;
        scanf("%d",&n);
        int l1=0,l2=0,l=0;
        for(int i=0;i<n;i++)
        {
            int c;
            scanf("%d",&c);
            if(c==0)
            ab[l++]=c;
            else if(c>0)
            a[l1++]=c;
            else 
            b[l2++]=c;
            if(c<minn)
            minn=c;;
            if(c>maxx)
            maxx=c;
        }
        if(maxx==0)
        printf("No\n");
        else 
        {
            int l11,l22;
            l11=0;
            l22=0;
            for(int i=l;i<n;i++)
            {
                if(l11<l1&&sum<=0)
                {
                    ab[i]=a[l11++];
                    sum+=ab[i];
                }
                else 
                {
                    ab[i]=b[l22++];
                    sum+=ab[i];
                }
            }
            printf("Yes\n");
            for(int i=0;i<n;i++)
            printf("%d ",ab[i]);
            printf("\n");
        }
    }
}

​​​​​​​

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值