宇视笔试题
1、下列代码输出结果为:
#include<stdio.h>
union{
int i;
char x[2];
}a;
void main(){
a.x[0]=10;
a.x[1]=1;
printf("%d",a.i);
}
2、比较下列哪个运算符优先级最高? % << <= <<=
3、char arr[6]; sizeof(arr)是多少?
char filename[]="/etc/passwd"; sizeof(filename)是多少?
sizeof("a")是多少?
4、int w[2][3],(*pw)[3],下列哪些可以作为对数组w中元素的引用?
*(pw+1) *(w[0]+2) pw[0][0] *(pw[1]+2)
5、一个链表,长度未知,怎么找出中间节点的位置?表结构和函数体自定义
6、找出一个字符串中包含的最长的对称字符串,并返回长度,比如“abccba”和“abcdcba”均为对称字符串
7、6个瓶子,装两种油,一种油的价格是另一种的double,容量分别为8,13,15,17,19,31,分别用相等的钱买这两种油,最后剩下一瓶,剩下的一瓶为:13,15,17,19?
======================
前面的选择题很多都忘了,就不贴了
[解决办法]
5. 两个指针先指向头结点,其中一个指针每次走一步,另一个指针每次走两步。当第二个指针走到末尾时,第一个指针就在中间。
[解决办法]
第6题
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include <stdbool.h>
static bool ispalindrome(char *str,int len);
int palindromes(char *str);
int main()
{
char *str="abcdcbfg";
int c=palindromes(str);
printf("%d\n",c);
return 0;
}
int palindromes(char *str)
{
int len=strlen(str);
int maxlength=0;
int length;
for(int i=0;i<len-1;i++)
{
for(int j=i+1;j<len;j++)
{
if(str[i]==str[j] && ispalindrome(str+i,j-i+1))
{
length=j-i+1;
if(maxlength<length)maxlength=length;
}
}
}
return maxlength;
}
static bool ispalindrome(char *str,int len)
{
if(len<=1)
return true;
else
return (str[0]==str[len-1] && ispalindrome(str+1,len-2));
}