请写一个函数,计算字符串的长度.
答:
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这些整数中取值,其中有一个数
值重复了,现在要设计一个算法找出这个数字,且每个元素只能被访问一次。还有其他的
要求,记得不是很清楚了,等回来的同学再补充吧。(加起来就行了)