一次笔试,编程题教我做人,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缓存以节约资源。