微信

使用微信服务,更方便

职友集>程序员面试题 > 群硕笔试题

群硕笔试题

2015-11-25 06:30:01 阅读( 62 )

2218人 收藏本页

标签:程序员面试题

请写一个函数,计算字符串的长度.
答:
int strlen(const char* src){
assert( NULL != src);
int len = 0;
while(*src++ != ‘\0′)
len++;
return len;
}
2. 请写一个函数,实现strstr,即从一个字符串中,查找另一个字符串的位置,如strstr(“12345″, “34″)
返回值为2,在2号位置找到字符串34
答:
char * strstr(const char* src, const char* sub){
assert( NULL != src && NULL != sub);
const char* p = src, *q = sub;
while(*src != ‘\0′){
if(*src++ != *sub++){
src = ++p;
sub = q;
}
}
if(*src == ‘\0′ )
return NULL;
else
return q;
}
3. 编写函数,将”bei jing ni hao ma.”倒置为”ma. hao ni jing bei”,即句子中的单词位置倒置,而不改变单词内部的结构。
答.
void reverse_(char* ptr, int len){
if(len == 0)
return;
char temp;
for(int i =0; i <= len / 2; i++){
temp = *(ptr+i);
*(ptr+i) = *(ptr + len – i);
*(ptr + len -i) = temp;
}
}
void reverse(char * src){
assert(NULL != src);
char * p = src, *src_ = src;
while(*src != ‘\0′){
if(*src == ‘ ‘){
reverse_(p, src-p);
while(*src++ == ‘ ‘);
p = src;
}else{
src++;
}
}
reverse_(src_, src – src_ – 1);
}
4. 智力题,有8个球和一个天平,其中有一个球比其他的都重,看怎么通过2次找到该重球.
答.设球的标签为abcdefgh
先选abc与def比较,三种结果
abc更重,则再比较a与b,如果哪个球重,则该球为重球,如果平衡,则c球为重球
def更重,同上
一样重,则比较g,h,重球为所要之球
5.拓展上面题目,如果有n个球,怎么用最少的次数找到重球,并且求出最少次数。
答.仿照上题即可,次数为大于log3n的最小整数
要写一个Combination
代码如下
import java.util.ArrayList;
import java.util.StringTokenizer;
public class MyCombination {
/**
* @param args
*/
public static void main(String[] args) {
initialize(args);
System.out.println(“Now work”);
doWork(“”);
}
/**
*
* @param args
* initialization
*/
private static void initialize(String[] args) {
if (args.length == 0) {
System.out
.println(“invalid usage\nThe valid usage is \”java MyCombination {set}\”");
}
array = new ArrayList();
StringBuffer sb = new StringBuffer();
for (String i : args) {
sb.append(i + ” “);
}
System.out.println(sb);
StringTokenizer st = new StringTokenizer(new String(sb));
while (st.hasMoreTokens()) {
array.add(st.nextToken());
}
}
/**
*
* @param ab
* main work function
*/
private static void doWork(String ab) {
String[] a = new String[array.size()];
if(ab==”"){
for(int i=0;i<array.size();i++){
a[i] = new String(“”+array.get(i));
}
for(String i:a){
System.out.println(i);
if(!i.substring(i.length()-1).equals(array.get(array.size()-1))) {
int j = array.indexOf(i.substring(i.length()-1));
for(int k=1;k<array.size()-j;k++){
String newValue = new String(i+array.get(j+k));
System.out.println(newValue);
doWork(newValue);
}
}
}
}else{
if(!ab.substring(ab.length()-1).equals(array.get(array.size()-1))) {
int j = array.indexOf(ab.substring(ab.length()-1));
for(int k=1;k<array.size()-j;k++){
String newValue = new String(ab+array.get(j+k));
System.out.println(newValue);
doWork(newValue);
}
}
}
}
private static ArrayList array;
}
就记得几个
1、release和Debug的区别,及其运行速度(如果是.NET下边,呵呵,区别就好说了。如果是VSC++就着实有些话要说了:编译速度、运行速底、调试性等)
2、死锁解缩的四种形式(死锁有四个必要条件,破坏其一即可……)
3、.Net中public/private/proteced/friend/proteced friend的范围(晕死)
4、关于Java的有两道,没怎么注意
5、写函数的题目
1)冒泡法排序
2)关于judge platform的
6、Logic和算法
大意是有一个1001个元素的数组,每个元素都在1到1000这些整数中取值,其中有一个数
值重复了,现在要设计一个算法找出这个数字,且每个元素只能被访问一次。还有其他的
要求,记得不是很清楚了,等回来的同学再补充吧。(加起来就行了)
请写一个函数,计算字符串的长度.

答:

int strlen(const char* src){

assert( NULL != src);

int len = 0;

while(*src++ != ‘\0′)

len++;

return len;

}

2. 请写一个函数,实现strstr,即从一个字符串中,查找另一个字符串的位置,如strstr(“12345″, “34″)

返回值为2,在2号位置找到字符串34

答:

char * strstr(const char* src, const char* sub){

assert( NULL != src && NULL != sub);

const char* p = src, *q = sub;

while(*src != ‘\0′){

if(*src++ != *sub++){

src = ++p;

sub = q;

}

}

if(*src == ‘\0′ )

return NULL;

else

return q;

}

3. 编写函数,将”bei jing ni hao ma.”倒置为”ma. hao ni jing bei”,即句子中的单词位置倒置,而不改变单词内部的结构。

答.

void reverse_(char* ptr, int len){

if(len == 0)

return;

char temp;

for(int i =0; i <= len / 2; i++){

temp = *(ptr+i);

*(ptr+i) = *(ptr + len – i);

*(ptr + len -i) = temp;

}

}

void reverse(char * src){

assert(NULL != src);

char * p = src, *src_ = src;

while(*src != ‘\0′){

if(*src == ‘ ‘){

reverse_(p, src-p);

while(*src++ == ‘ ‘);

p = src;

}else{

src++;

}

}

reverse_(src_, src – src_ – 1);

}

4. 智力题,有8个球和一个天平,其中有一个球比其他的都重,看怎么通过2次找到该重球.

答.设球的标签为abcdefgh

先选abc与def比较,三种结果

abc更重,则再比较a与b,如果哪个球重,则该球为重球,如果平衡,则c球为重球

def更重,同上

一样重,则比较g,h,重球为所要之球

5.拓展上面题目,如果有n个球,怎么用最少的次数找到重球,并且求出最少次数。

答.仿照上题即可,次数为大于log3n的最小整数

要写一个Combination

代码如下

import java.util.ArrayList;

import java.util.StringTokenizer;

public class MyCombination {

/**

* @param args

*/

public static void main(String[] args) {

initialize(args);

System.out.println(“Now work”);

doWork(“”);

}

/**

*

* @param args

* initialization

*/

private static void initialize(String[] args) {

if (args.length == 0) {

System.out

.println(“invalid usage\nThe valid usage is \”java MyCombination {set}\”");

}

array = new ArrayList();

StringBuffer sb = new StringBuffer();

for (String i : args) {

sb.append(i + ” “);

}

System.out.println(sb);

StringTokenizer st = new StringTokenizer(new String(sb));

while (st.hasMoreTokens()) {

array.add(st.nextToken());

}

}

/**

*

* @param ab

* main work function

*/

private static void doWork(String ab) {

String[] a = new String[array.size()];

if(ab==”"){

for(int i=0;i<array.size();i++){

a[i] = new String(“”+array.get(i));

}

for(String i:a){

System.out.println(i);

if(!i.substring(i.length()-1).equals(array.get(array.size()-1))) {

int j = array.indexOf(i.substring(i.length()-1));

for(int k=1;k<array.size()-j;k++){

String newValue = new String(i+array.get(j+k));

System.out.println(newValue);

doWork(newValue);

}

}

}

}else{

if(!ab.substring(ab.length()-1).equals(array.get(array.size()-1))) {

int j = array.indexOf(ab.substring(ab.length()-1));

for(int k=1;k<array.size()-j;k++){

String newValue = new String(ab+array.get(j+k));

System.out.println(newValue);

doWork(newValue);

}

}

}

}

private static ArrayList array;

}

就记得几个

1、release和Debug的区别,及其运行速度(如果是.NET下边,呵呵,区别就好说了。如果是VSC++就着实有些话要说了:编译速度、运行速底、调试性等)

2、死锁解缩的四种形式(死锁有四个必要条件,破坏其一即可……)

3、.Net中public/private/proteced/friend/proteced friend的范围(晕死)

4、关于Java的有两道,没怎么注意

5、写函数的题目

1)冒泡法排序

2)关于judge platform的

6、Logic和算法

大意是有一个1001个元素的数组,每个元素都在1到1000这些整数中取值,其中有一个数

值重复了,现在要设计一个算法找出这个数字,且每个元素只能被访问一次。还有其他的

要求,记得不是很清楚了,等回来的同学再补充吧。(加起来就行了)


来自IT公司面试手册

下一篇:新波科技公司面试题笔试题IQ+专业

上一篇:双汇软件笔试题

亲~ 如果您有更好的答案 可在评论区发表您独到的见解。

您想查看更多的信息: 面试题