笔试总结

一次笔试,编程题教我做人,o(╥﹏╥)o

12块石头(编号ABCDEFGHIJKL)

三次输入格式 字符串 字符串 字符串(石头编号,石头编号,轻重等)

输出不同石头编号 和  轻重

天平左右摆的石头数目还要是一样的

由于已知分组和结果,可以直接从结果出发寻找不一样的石头,而不用思考过程怎么怎么样,由答案找结果,所以如何将输入的字符串里的字符区别开来至关重要。而且也不知道那个石头轻重,所以还要分情况考虑。

在网上找了一种思路是通过枚举,看这块石头是否满足称量结果,如果符合,那么它是正常的,否则,看它是重还是轻。

#include<iostream>
#include<cstring>
using namespace std;
 
char Left[3][5];                       //天平左边石头
char Right[3][5];                      //天平右边石头
char Result[3][5];                     //每次结果
 
bool Find_Unomal(char c, bool light)
{  
    //light为true时,石头是轻的;light为false时,石头是重的
    for(int i=0;i<3;i++)
    {               
        char *pLeft,*pRight;//指向天平两边的字符串
        if(light)
        {
            pLeft=Left[i];
            pRight=Right[i];
        }
        else//重的话就把顺序反过来即可
        {
            pLeft=Right[i];
            pRight=Left[i];
        }
        switch(Result[i][0])//和结果字符首字母比较
        {                           
            case 'u':
                if(strchr(pRight,c)==NULL)              //天平右边比左边轻,石头不在右边肯定就错了
                    return false;
                break;
            case 'd':
                if(strchr(pLeft,c)==NULL)               //天平右边比左边重,石头不在左边肯定错了
                    return false;
                break;
            case 'e':
                if(strchr(pLeft,c)||strchr(pRight,c))   //天平平衡时,石头出现在左边或者右边都不行
                    return false;
                break;
        }
    }
    return true;                        //三次结果都通过检验,返回true
}
int main()
{
        for(int i=0;i<3;i++)
            cin>>Left[i]>>Right[i]>>Result[i];
        for(char c='A';c<='L';c++)
        {     
            //对每一块石头进行尝试
            if(Find_Unomal(c,true))
            {         
                cout<<c<<" light"<<endl;//c是不一样的并且是轻的
                break;
            }
            else if(Find_Unomal(c,false))
            {   
                cout<<c<<" heavy"<<endl;//c是不一样的并且是重的
                break;
            }
        }
    return 0;
}

这个题目考虑太久就在我试图把字符串拆分开来,而没有想到可以枚举测试到底哪块石头有问题。

后来网上发现都是如何用最少次数分组实现查找坏球问题,一般回答在已知坏球轻重的前提下,分三组测一次就知道坏球在哪组,不知的情况如果分四组测两次,是2*log4(N)即log2(N)大于log3(N)(也有可能只称一次得结果),综上还是分三组称比较好。

部分选择题 比较多的数据库

一些定义

外键:关键字在一个关系中设为主键,那么它在另一个关系中被称该关系的外键。

外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。

建立外键的前提: 本表的列必须与外键类型相同(外键必须是外表主键)。

指定外键关键字: foreign key(列名)

引用外键关键字: references <外键表名>(外键列名)

事件触发限制: on delete和on update , 可设参数cascade(跟随外键改动), restrict(限制外表中的外键改动),set Null(设空值),set Default(设默认值),[默认]no action

例如:

outTable表 主键 id 类型 int

创建含有外键的表:

create table temp(

id int,

name char(20),

foreign key(id) references outTable(id) on delete cascade on update cascade);

说明:把id列 设为外键 参照外表outTable的id列 当外键的值删除 本表中对应的列筛除 当外键的值改变 本表中对应的列值改变。

级联
级联是用来设计一对多的,在启用一个级联更新选项后,就可在存在相匹配的外键值的前提下更改一个主键值。系统会相应地更新所有匹配的外键值。

级联修改: on updata cascade

级联删除: on delete cascade

超键

在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。

候选键

不含多与属性的超键。

表与表之间的联系

https://www.cnblogs.com/haiyan123/p/7489743.html

数据库常用函数

https://www.cnblogs.com/Chenshuai7/p/5142754.html

ARP地址解析协议

是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值