linux兴趣小组2017面试题 1. 分析下列程序的输出. int main(int argc, char *argv[]) { int t = 4; printf("%lu\n", sizeof(t--)); printf("%lu\n", sizeof("ab c\nt\012\xa1*2")); return 0; } 若运行printf("%d\n",t); 结果为4,因为sizeof是关键字,且其后面的内容在编译时运算并替换为运算后的数值,在运行程序时直接调用替换值,不再进行t--的运算,故t仍是4.在进行sizeof运算时,\n、 \012、 \xa1 分别为一个字符,且包含结束符\0. 2. 下面代码会输出什么? int main(int argc, char *argv[]) { int a = 10, b = 20, c = 30; printf("%d %d\n&q 继续阅读 >>


王良 17/05/30 09:26:56
数组指针和指针数组的区别 数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。 如要将二维数组赋给一指针,应这样赋值: int a[3][4]; int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0] p++; //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][] 所以数组指针也称指向一维数组的指针,亦称行指针。 指针数组 定义 int p[n]; []优先级高,先与p结合成为一个数组,再由int说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1是错误的,这样赋值也是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针 继续阅读 >>


王良 17/05/30 09:26:51
注释 <!-- --> 元素选择器 <style> h1 {color:red;} </style> <h1> 第一个段落(红色) </h1> 类选择器 <style> .red-text{color:red;} </style> <h1 class="red.text"> 标题一(红色) </h1> 图像边框 ( .后面没有空格) .thick-green-border { border-color: green; border-width: 10px; border-style: solid; border-radius: 50%; //圆形边框 } 表单 使用HTML来构建可以跟服务器交互的Web表单(form),通过给你的form元素添加一个action属性来达到此目的。action属性的值指定了表单提交到服务器的地址。 <for 继续阅读 >>


王良 17/05/30 09:26:46
阶乘因式分解(一) 描述 给定两个数m,n,其中m是一个素数。将n(0<=n<=10000)的阶乘分解质因数,求其中有多少个m。 输入 第一行是一个整数s(0<s<=100),表示测试数据的组数随后的s行, 每行有两个整数n,m。 输出 输出m的个数。 样例输入 2 100 5 16 2 样例输出 24 15 ====================================================================== 解题思路: n!看成一个【1,n】数组,第几个数就是几 第m个数是m,能被m整除,第2m个数是2m,能被m整除。。。 在1~n里一共有n/m个数能被m整除,这就有n/m个m了,加到count里(100/5=20) 接下来看m,2m,3m……n/m*m这n/m个数里(20个) 每个数都/m了之后变成【1,n/m】数组,第几个数就是几 第m个数是m,能被m整除,第2m个数是2m,能被m整除。 有n/m/m个数能被m整除,加到count里(20/5=4,20+4=24) n<m 继续阅读 >>


王良 17/05/30 09:26:41
括号配对问题 (栈的使用) 描述 现在,有一行括号序列,请你检查这行括号是否配对。 输入 第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数 据保证S中只含有"[","]","(",")"四种字符 输出 每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No 样例输入 3 [(]) (]) ([[]()]) 样例输出 No No Yes ============================================================================================= 解题思路 首先判断奇偶性,再将‘(’与‘[’入栈,依次判断是否能配对,能配对的出栈,否则就是不满足的情况,停止循环。 ============================= 继续阅读 >>


王良 17/05/30 09:26:37
描述 笨小熊的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小熊就认为这是个Lucky Word,这样的单词很可能就是正确的答案。 输入 第一行数据N(0<N<100)表示测试数据组数。 每组测试数据输入只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。 输出 每组测试数据输出共两行,第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”; 第二行是一个整数,如果输入单词是Lucky Word,输出maxn-minn的值,否则输出0 样例输入 2 error olympic 样例输出 Lucky Word 2 No Answer 0 ===================================== 继续阅读 >>


王良 17/05/30 09:26:32
Problem Description 用1,2,...,n表示n个盘子,称为1号盘,2号盘,...。号数大盘子就大。经典的汉诺塔问题经常作为一个递归的经典例题存在。可能有人并不知道汉诺塔问题的典故。汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘。上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一回只能移动一个圆盘。我们知道最少需要移动2^64-1次.在移动过程中发现,有的圆盘移动次数多,有的少 。 告之盘子总数和盘号,计算该盘子的移动次数. Input 包含多组数据,首先输入T,表示有T组数据.每个数据一行,是盘子的数目N(1<=N<=60)和盘号k(1<=k<=N)。 Output 对于每组数据,输出一个数,到达目标时k号盘需要的最少移动数。 Sample Input 2 60 1 3 1 Sample Output 576460752303423488 4 =================== 继续阅读 >>


王良 17/05/30 09:26:27
屏幕切换 Ctrl Alt F1 切换为图形界面Ctrl Alt F2 切换为字符界面 基本命令 ifconfig 查看ip (Windows中是 ipconfig )halt 关机 (或 shutdown -h now)reboot 重启tab 自动补全Ctrl U 清空至行首Ctrl K 清空至行尾Ctrl L 清屏 (Windows 中是 cls)Ctrl C 取消本次命令编辑pwd 查看当前所在目录 ls 查看当前目录文件 -l 查看 详细信息-a 列出所有文件(包括隐藏文件)-A 列出所有文件(包括隐藏文件, 不包括.与..两个目录)-lh 信息中文件大小以K、M形式显示-r 倒序列出文件-R 递归列出子目录-S 以文件容量大小排序-t 以时间顺序列出-ltr 以时间顺序倒序列出--color=never 不依据文件特性给予颜色显示--full-time 以完整时间模式(年、月、日、时、分)输出--time={atime, ctime} 输出访问时间或改变权限属性时间,而非内容更改时间 cp 复制 cp 源文件 目标文件-r 递归复制-p 继续阅读 >>


王良 17/05/30 09:26:22
vi (Linux下的文本编辑器) a 在光标后添加文本A 在本行行末添加文本i 在光标前插入文本I 在本行开始插入文本o 在光标下插入新行O 在光标上插入新行dd 删除光标所在行 (2dd即删除此下的两行,3dd以此类推)p 粘贴(dd命令删除的那行)u 取消上一命令. 重复上一命令 shift + ':' 进入底行模式 set nu 显示行号q 退出vi编辑器q! 强制退出vi编辑器w 保存wq 保存并退出vi/string 搜索文本string%s/.../.../g 全文替换文本(g表示不提示"是否替换")1,5s/.../.../g 只替换1到5行的文字 作者:liushall 发表于2017/5/30 9:26:19 原文链接 阅读:52 评论:0 查看评论 继续阅读 >>


王良 17/05/30 09:26:19
一次生日Party可能有p人或者q人参加,现准备有一个大蛋糕.问最少要将蛋糕切成多少块(每块大小不一定相等),才能使p人或者q人出席的任何一种情况,都能平均将蛋糕分食.  Input 每行有两个数p和q.  Output 输出最少要将蛋糕切成多少块.  Sample Input 2 3 Sample Output     4 Hint   将蛋糕切成大小分别为1/3,1/3,1/6,1/6的四块即满足要求. 当2个人来时,每人可以吃1/3+1/6=1/2 , 1/2块。 当3个人来时,每人可以吃1/6+1/6=1/3 , 1/3, 1/3块。   ===============================================================================================   思路:      y = a + b - gcd(a,b);     继续阅读 >>


王良 17/05/30 09:26:15