很无耻的在校招的时候插队面实习生

1.算法,打印字符串全排列

#include <iostream>
#include <string>
using namespace std;
//去重的全排列就是从第一个数字起每个数分别与它后面非重复出现的数字交换。用编程的话描述就是第i个数与第j个数交换时,要求[i,j中没有与第j个数相等的数。
void swap(char *a, char *b)
{
    char t = *a;
    *a = *b;
    *b = t;
}
//k表示当前选取到第几个数,m表示共有多少数.  
bool isswap(char *pszstr, int nbegin, int nend)
{
    for(int i = nbegin; i < nend; i++)
    {
    if(pszstr[i] == pszstr[nend])
        return false;
    }
    return true;
}


void allarrange(char *pszstr, int k, int m)
{
    if(k == m)
    {
    static int s_i = 1;
    printf(" the %3d arrange\t%s\n", s_i++, pszstr);
    }
    else
    {
       for(int i = k; i <=m; i++)//第i个数分别与它后面的数字交换就能得到新的排列  
    {
        if(isswap(pszstr, k, i))
        {
            swap(pszstr+k, pszstr+i);
            allarrange(pszstr, k+1, m);
            swap(pszstr+k, pszstr+i);
        }
    }
    }
}

void foo(char *pszstr)
{
    allarrange(pszstr, 0, strlen(pszstr) – 1);
}

int main()
{
    char p[] = "abcd";
    foo(p);
    cin.get();
    return 0;
}

2.查找全部java进程

ps -ef | grep java

3.tail命令是干嘛的?

tail命令从指定点开始将File参数指定的文件写到标准输出。如果没有指定文件,则会使用标准输入。Number 变量指定将多少单元写入标准输出。Number 变量的值可以是正的或负的整数。如果值的前面有+(加号),从文件开头指定的单元数开始将文件写到标准输出。如果值的前面有-(减号),则从文件末尾指定的单元数开始将文件写到标准输出。如果值前面没有+(加号)或-(减号),那么从文件末尾指定的单元号开始读取文件。

4.全排列其他解法

just cpp

//对abc进行全排列,那么可以看做:ab的全排列+c和ac的全排列+b和bc的全排列+a三个的组合

`http://blog.csdn.net/morewindows/article/details/7370155`

void allarrange(char *p, int k)
{
    int i;
    if('\0' == p[k])
    printf("%s\t", p);
    else
    {
    for(i = k; p[i] != '\0'; i++)
    {
        swap(&p[k], &p[i]);
        allarrange(p, k+1);//全排列右子串
        swap(&p[k], &p[i]);
    }
    }
}

5.其他

\0是C++中字符串的结尾标志,存储在字符串的结尾。比如char cha[5]表示可以放4个字符的数组,由于c/c++中规定字符串的结尾标志为'\0',它虽然不计入串长,但 要占内存空间,而一个汉字一般用两个字节表示,且c/c++中如一个数组cha[5],有5个变量,分别是 cha[0] , cha[1] , cha[2] , cha[3] , cha[4] , 所以cha[5]可以放4个字母(数组的长度必须比字符串的元素个数多1,用以存放字符串结束标志'\0')或者放2个汉字(1个汉字占2个字节,1个字母占一个字节),cha[5]占5个字节内存空间。