青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 297,  comments - 15,  trackbacks - 0
from:
http://blog.csdn.net/zhsenl/article/details/7515279 



1、將一整數逆序后放入一數組中(要求遞歸實現)
void convert(int *result, int n) {
 if(n>=10)
  convert(result+1, n/10);
 *result = n%10; 
}
int main(int argc, char* argv[]) {
 int n = 123456789, result[20]={};
 convert(result, n);
 printf("%d:", n);
 for(int i=0; i<9; i++)
  printf("%d", result);
}

2、求高于平均分的學生學號及成績(學號和成績人工輸入)
double find(int total, int n) {
 int number, score,  average;
 scanf("%d", &number);
 if(number != 0) {
  scanf("%d", &score);
  average = find(total+score, n+1);
  if(score >= average)
   printf("%d:%d\n", number, score);
  return average;
 } else {
  printf("Average=%d\n", total/n);
  return total/n;
 }
}
int main(int argc, char* argv[]) {
 find(0, 0);
}

3、遞歸實現回文判斷(如:abcdedbca就是回文,判斷一個面試者對遞歸理解的簡單程序)
int find(char *str, int n) {
 if(n<=1) return 1;
 else if(str[0]==str[n-1]) return find(str+1, n-2);
 else  return 0;
}

int main(int argc, char* argv[]) {
 char *str = "abcdedcba";
 printf("%s: %s\n", str, find(str, strlen(str)) ? "Yes" : "No");
}

4、組合問題(從M個不同字符中任取N個字符的所有組合)
void find(char *source, char *result, int n) {
 if(n==1) {
  while(*source)
     printf("%s%c\n", result, *source++);
 } else {
  int i, j;
  for(i=0; source != 0; i++);
  for(j=0; result[j] != 0; j++);
  for(; i>=n; i--) {
   result[j] = *source++;
   result[j+1] = '\0';
   find(source, result, n-1);
  }
 }
}

int main(int argc, char* argv[]) {
 int const n = 3;
 char *source = "ABCDE", result[n+1] = {0};
 if(n>0 && strlen(source)>0 && n<=strlen(source))
  find(source, result, 3);
}

5、分解成質因數(如435234=251*17*17*3*2,據說是華為筆試題)
void prim(int m, int n) {
 if(m>n) {
  while(m%n != 0) n++;
  m /= n;
  prim(m, n);
  printf("%d*", n);
 }
}
int main(int argc, char* argv[]) {
 int n = 435234;
 printf("%d=", n);
 prim(n, 2);
}
6、尋找迷宮的一條出路,o:通路; X:障礙。(大家經常談到的一個小算法題)
#define MAX_SIZE  8
int H[4] = {0, 1, 0, -1}; 
int V[4] = {-1, 0, 1, 0};           
char Maze[MAX_SIZE][MAX_SIZE] = {{'X','X','X','X','X','X','X','X'},
                                 {'o','o','o','o','o','X','X','X'},
                                 {'X','o','X','X','o','o','o','X'},
                             {'X','o','X','X','o','X','X','o'},
                         {'X','o','X','X','X','X','X','X'},
{'X','o','X','X','o','o','o','X'},
         {'X','o','o','o','o','X','o','o'},
                                 {'X','X','X','X','X','X','X','X'}};
void FindPath(int X, int Y) {
    if(X == MAX_SIZE || Y == MAX_SIZE) {
       for(int i = 0; i < MAX_SIZE; i++)
for(int j = 0; j < MAX_SIZE; j++)
                  printf("%c%c", Maze[j], j < MAX_SIZE-1 ? ' ' : '\n');
}else for(int k = 0; k < 4; k++) 
if(X >= 0 && Y >= 0 && Y < MAX_SIZE && X < MAX_SIZE && 'o' == Maze[X][Y]) {
                   Maze[X][Y] = ' ';
                   FindPath(X+V[k], Y+H[k]);
                   Maze[X][Y] ='o'; 
}
}
int main(int argc, char* argv[]) {
    FindPath(1,0);
}

7、隨機分配座位,共50個學生,使學號相鄰的同學座位不能相鄰(早些時候用C#寫的,沒有用C改寫)。
static void Main(string[] args)
{
 int Tmp = 0, Count = 50;   
 int[] Seats = new int[Count];   
 bool[] Students = new bool[Count];
 System.Random RandStudent=new System.Random();
 Students[Seats[0]=RandStudent.Next(0,Count)]=true;
 for(int i = 1; i < Count; ) {
     Tmp=(int)RandStudent.Next(0,Count);
     if((!Students[Tmp])&&(Seats[i-1]-Tmp!=1) && (Seats[i-1] - Tmp) != -1) {
   Seats[i++] = Tmp;
Students[Tmp] = true;
  }
 }
 foreach(int Student in Seats)
     System.Console.Write(Student + " ");
 System.Console.Read();
}

8、求網格中的黑點分布。現有6*7的網格,在某些格子中有黑點,已知各行與各列中有黑點的點數之和,請在這張網格中畫出黑點的位置。(這是一網友提出的題目,說是他筆試時遇到算法題)
#define ROWS 6
#define COLS 7
int iPointsR[ROWS] = {2, 0, 4, 3, 4, 0};           // 各行黑點數和的情況
int iPointsC[COLS] = {4, 1, 2, 2, 1, 2, 1};        // 各列黑點數和的情況
int iCount, iFound;
int iSumR[ROWS], iSumC[COLS], Grid[ROWS][COLS];

int Set(int iRowNo) {
if(iRowNo == ROWS) { 
        for(int iColNo=0; iColNo < COLS && iSumC[iColNo]==iPointsC[iColNo]; iColNo++) 
           if(iColNo == COLS-1) {
               printf("\nNo.%d:\n", ++iCount); 
               for(int i=0; i < ROWS; i++)
                  for(int j=0; j < COLS; j++)
                      printf("%d%c", Grid[j], (j+1) % COLS ? ' ' : '\n');
               iFound = 1; // iFound = 1,有解
           }
    } else {
        for(int iColNo=0; iColNo < COLS; iColNo++) {
            if(iPointsR[iRowNo] == 0) { 
                Set(iRowNo + 1);
   } else if(Grid[iRowNo][iColNo]==0) { 
Grid[iRowNo][iColNo] = 1; 
iSumR[iRowNo]++; iSumC[iColNo]++;                                  if(iSumR[iRowNo]<iPointsR[iRowNo] && iSumC[iColNo]<=iPointsC[iColNo])
                     Set(iRowNo);
else if(iSumR[iRowNo]==iPointsR[iRowNo] && iRowNo < ROWS)
                     Set(iRowNo + 1);
                Grid[iRowNo][iColNo] = 0;
                iSumR[iRowNo]--; 
iSumC[iColNo]--;
            }
        }
    }
return iFound;     // 用于判斷是否有解
}
int main(int argc, char* argv[]) {
    if(!Set(0))
        printf("Failure!"); 
}

9、有4種面值的郵票很多枚,這4種郵票面值分別1, 4, 12, 21,現從多張中最多任取5張進行組合,求取出這些郵票的最大連續(xù)組合值。(據說是華為2003年校園招聘筆試題)
#define N 5
#define M 5
int k, Found, Flag[N];
int Stamp[M] = {0, 1, 4, 12, 21};

// 在剩余張數n中組合出面值和Value
int Combine(int n, int Value) {
 if(n >= 0 && Value == 0) {
  Found = 1;
  int Sum = 0;
  for(int i=0; i<N && Flag != 0; i++) {
   Sum += Stamp[Flag];
   printf("%d ", Stamp[Flag]);
  }
  printf("\tSum=%d\n\n", Sum);
 }else for(int i=1; i<M && !Found && n>0; i++)
  if(Value-Stamp >= 0) {
   Flag[k++] = i;
   Combine(n-1, Value-Stamp);
   Flag[--k] = 0;
  }
 return Found;
}

int main(int argc, char* argv[]) {
 for(int i=1; Combine(N, i); i++, Found=0);
}

10、大整數數相乘的問題。(這是2002年在一考研班上遇到的算法題)
void Multiple(char A[], char B[], char C[]) {
    int TMP, In=0, LenA=-1, LenB=-1;
    while(A[++LenA] != '\0');
    while(B[++LenB] != '\0');
    int Index, Start = LenA + LenB - 1;
    for(int i=LenB-1; i>=0; i--) {
        Index = Start--;
        if(B != '0') {
            for(int In=0, j=LenA-1; j>=0; j--) {
                TMP = (C[Index]-'0') + (A[j]-'0') * (B - '0') + In;
                C[Index--] = TMP % 10 + '0';
                In = TMP / 10;
            }
            C[Index] = In + '0';
        }
    }
}

int main(int argc, char* argv[]) {
    char A[] = "21839244444444448880088888889";
    char B[] = "38888888888899999999999999988";
char C[sizeof(A) + sizeof(B) - 1];

    for(int k=0; k<sizeof(C); k++)
        C[k] = '0';
    C[sizeof(C)-1] = '\0';

    Multiple(A, B, C);
    for(int i=0; C != '\0'; i++)
        printf("%c", C);
}

11、求最大連續(xù)遞增數字串(如“ads3sl456789DF3456ld345AA”中的“456789”)
int GetSubString(char *strSource, char *strResult) {
    int iTmp=0, iHead=0, iMax=0;
    for(int Index=0, iLen=0; strSource[Index]; Index++) {
        if(strSource[Index] >= '0' && strSource[Index] <= '9' && 
strSource[Index-1] > '0' && strSource[Index] == strSource[Index-1]+1) {
            iLen++;                       // 連續(xù)數字的長度增1 
        } else {                          // 出現字符或不連續(xù)數字
            if(iLen > iMax) {
            iMax = iLen;  iHead = iTmp; 
            }        
        // 該字符是數字,但數字不連續(xù)
            if(strSource[Index] >= '0' && strSource[Index] <= '9') { 
                iTmp = Index; 
iLen = 1; 
            }
        }    
    }
    for(iTmp=0 ; iTmp < iMax; iTmp++) // 將原字符串中最長的連續(xù)數字串賦值給結果串
        strResult[iTmp] = strSource[iHead++];
    strResult[iTmp]='\0';
    return iMax;     // 返回連續(xù)數字的最大長度
}
int main(int argc, char* argv[]) {
    char strSource[]="ads3sl456789DF3456ld345AA", char strResult[sizeof(strSource)];
printf("Len=%d, strResult=%s \nstrSource=%s\n", 
GetSubString(strSource, strResult), strResult, strSource);
}

12、四個工人,四個任務,每個人做不同的任務需要的時間不同,求任務分配的最優(yōu)方案。(2005年5月29日全國計算機軟件資格水平考試——軟件設計師的算法題)。
#include "stdafx.h"
#define N 4
int Cost[N][N] = { {2, 12, 5, 32},  // 行號:任務序號,列號:工人序號
                    {8, 15, 7, 11},  // 每行元素值表示這個任務由不同工人完成所需要的時間
                    {24, 18, 9, 6},
                    {21, 1, 8, 28}};
int MinCost=1000;
int Task[N], TempTask[N], Worker[N];
void Assign(int k, int cost) {
 if(k == N) {
  MinCost = cost; 
  for(int i=0; i<N; i++)
   TempTask = Task;
 } else {
  for(int i=0; i<N; i++) { 
   if(Worker==0 && cost+Cost[k] < MinCost) { // 為提高效率而進行剪枝
    Worker = 1; Task[k] = i; 
    Assign(k+1, cost+Cost[k]); 
    Worker = 0; Task[k] = 0;
   }
  }
 }
}
int main(int argc, char* argv[]) {
 Assign(0, 0);
 printf("最佳方案總費用=%d\n", MinCost);
 for(int i=0; i<N; i++)  /* 輸出最佳方案 */
  printf("\t任務%d由工人%d來做:%d\n", i, TempTask, Cost[TempTask]);
}
13、八皇后問題,輸出了所有情況,不過有些結果只是旋轉了90度而已。(回溯算法的典型例題,是數據結構書上算法的具體實現,大家都親自動手寫過這個程序嗎?)
#define N 8
int Board[N][N];
int Valid(int i, int j) {  // 判斷下棋位置是否有效
 int k = 1;
 for(k=1; i>=k && j>=k;k++)
  if(Board[i-k][j-k]) return 0;
 for(k=1; i>=k;k++)
  if(Board[i-k][j])  return 0;
 for(k=1; i>=k && j+k<N;k++)
  if(Board[i-k][j+k]) return 0;
 return 1;
}

void Trial(int i, int n) {  // 尋找合適下棋位置
 if(i == n) {
  for(int k=0; k<n; k++) {
   for(int m=0; m<n; m++)
    printf("%d ", Board[k][m]);
   printf("\n");
  }
  printf("\n");
 } else {
  for(int j=0; j<n; j++) {
   Board[j] = 1;
   if(Valid(i,j))
    Trial(i+1, n);
   Board[j] = 0;
  }
 }
}

int main(int argc, char* argv[]) {
 Trial(0, N);
}

14、實現strstr功能,即在父串中尋找子串首次出現的位置。(筆試中常讓面試者實現標準庫中的一些函數)
char * strstring(char *ParentString, char *SubString) {
 char *pSubString, *pPareString;
 for(char *pTmp=ParentString; *pTmp; pTmp++) {
  pSubString = SubString;
  pPareString = pTmp; 
  while(*pSubString == *pPareString && *pSubString != '\0') {
   pSubString++;
   pPareString++;
  }
  if(*pSubString == '\0')  return pTmp;
 }
 return NULL;
}

int main(int argc, char* argv[]) {
 char *ParentString = "happy birthday to you!";
 char *SubString = "birthday";
 printf("%s",strstring(ParentString, SubString));
}

15、現在小明一家過一座橋,過橋的時候是黑夜,所以必須有燈。現在小明過橋要1分,小明的弟弟要3分,小明的爸爸要6分,小明的媽媽要8分,小明的爺爺要12分。每次此橋最多可過兩人,而過橋的速度依過橋最慢者而定,而且燈在點燃后30分就會熄滅。問小明一家如何過橋時間最短?(原本是個小小智力題,據說是外企的面試題,在這里用程序來求解)
#include "stdafx.h"
#define N    5
#define SIZE 64

// 將人員編號:小明-0,弟弟-1,爸爸-2,媽媽-3,爺爺-4
// 每個人的當前位置:0--在橋左邊, 1--在橋右邊
int Position[N];    
// 過橋臨時方案的數組下標; 臨時方案; 最小時間方案; 
int Index, TmpScheme[SIZE], Scheme[SIZE];   
// 最小過橋時間總和,初始值100;每個人過橋所需要的時間
int MinTime=100, Time[N]={1, 3, 6, 8, 12};  
// 尋找最佳過橋方案。Remnant:未過橋人數; CurTime:當前已用時間; 
// Direction:過橋方向,1--向右,0--向左
void Find(int Remnant, int CurTime, int Direction) {
    if(Remnant == 0) {                               // 所有人已經過橋,更新最少時間及方案
        MinTime=CurTime;
        for(int i=0; i<SIZE && TmpScheme>=0; i++)
            Scheme = TmpScheme;
    } else if(Direction == 1) {                        // 過橋方向向右,從橋左側選出兩人過橋
        for(int i=0; i<N; i++)                    
            if(Position == 0 && CurTime + Time < MinTime) { 
                TmpScheme[Index++] = i;
                Position = 1;
                for(int j=0; j<N; j++) {
                    int TmpMax = (Time > Time[j] ? Time : Time[j]);
                    if(Position[j] == 0 && CurTime + TmpMax < MinTime) {
                        TmpScheme[Index++] = j;    
                        Position[j] = 1;        
                        Find(Remnant - 2, CurTime + TmpMax, !Direction); 
                        Position[j] = 0;        
                        TmpScheme[--Index] = -1;
                    }
                }
                Position = 0;
                TmpScheme[--Index] = -1;
            }
    } else {        // 過橋方向向左,從橋右側選出一個人回來送燈
        for(int j=0; j<N; j++) {
            if(Position[j] == 1 && CurTime+Time[j] < MinTime) {
                TmpScheme[Index++] = j;
                Position[j] = 0;
                Find(Remnant+1, CurTime+Time[j], !Direction);
                Position[j] = 1;
                TmpScheme[--Index] = -1;
            }
        }
    }
}
int main(int argc, char* argv[]) {
    for(int i=0; i<SIZE; i++)   // 初始方案內容為負值,避免和人員標號沖突
        Scheme = TmpScheme = -1;

Find(N, 0, 1);        // 查找最佳方案

    printf("MinTime=%d:", MinTime); // 輸出最佳方案
    for(int i=0; i<SIZE && Scheme>=0; i+=3)
        printf("  %d-%d  %d", Scheme, Scheme[i+1], Scheme[i+2]);
    printf("\b\b  ");
}

16、2005年11月金山筆試題。編碼完成下面的處理函數。函數將字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改變非'*'字符的先后順序,函數返回串中字符'*'的數量。如原始串為:ab**cd**e*12,處理后為*****abcde12,函數并返回值為5。(要求使用盡量少的時間和輔助空間)
int change(char *str) {     /* 這個算法并不高效,從后向前搜索效率要高些 */
 int count = 0;     /* 記錄串中字符'*'的個數 */
 for(int i=0, j=0; str; i++) {  /* 重串首開始遍歷 */
  if(str=='*') {    /* 遇到字符'*' */
   for(j=i-1; str[j]!='*'&&j>=0; j--) /* 采用類似插入排序的思想,將*前面 */
    str[j+1]=str[j];     /* 的非*字符逐個后移,直到遇到*字符 */
   str[j+1] = '*';
   count++;
  }
 }
 return count;
}
int main(int argc, char* argv[]) {
 char str[] = "ab**cd**e*12";
 printf("str1=%s\n", str);
 printf("str2=%s, count=%d", str, change(str));
}
// 終于得到一個比較高效的算法,一個網友提供,估計應該和金山面試官的想法一致。算法如下:
int change(char *str) {
 int i,j=strlen(str)-1;
 for(i=j; j>=0; j--) {
  if(str!='*') {
   i--;
  } else if(str[j]!='*') {
   str = str[j];
   str[j] = '*';
   i--;
  }
 }
 return i+1;
}

17、2005年11月15日華為軟件研發(fā)筆試題。實現一單鏈表的逆轉。
#include "stdafx.h"
typedef char eleType;  // 定義鏈表中的數據類型
typedef struct listnode  { // 定義單鏈表結構
 eleType data;
 struct listnode *next;
}node;

node *create(int n) {  // 創(chuàng)建單鏈表,n為節(jié)點個數
 node *p = (node *)malloc(sizeof(node)); 
 node *head = p;  head->data = 'A';
 for(int i='B'; i<'A'+n; i++) {    
  p = (p->next = (node *)malloc(sizeof(node)));
  p->data = i;
  p->next = NULL;  
 }
 return head;
}

void print(node *head) { // 按鏈表順序輸出鏈表中元素
 for(; head; head = head->next)
  printf("%c ", head->data); 
 printf("\n");
}

node *reverse(node *head, node *pre) { // 逆轉單鏈表函數。這是筆試時需要寫的最主要函數
 node *p=head->next;
 head->next = pre;
 if(p) return reverse(p, head);
 else  return head;
}

int main(int argc, char* argv[]) {
 node *head = create(6);
 print(head);
 head = reverse(head, NULL);
 print(head);
}

18、編碼實現字符串轉整型的函數(實現函數atoi的功能),據說是神州數碼筆試題。如將字符串 ”+123”?123, ”-0123”?-123, “123CS45”?123, “123.45CS”?123, “CS123.45”?0
#include "stdafx.h"
int str2int(const char *str) {    // 字符串轉整型函數
 int i=0, sign=1, value = 0;
 if(str==NULL)  return NULL;    // 空串直接返回 NULL
 if(str[0]=='-' || str[0]=='+') {   // 判斷是否存在符號位
  i = 1;
  sign = (str[0]=='-' ? -1 : 1);
 }
 for(; str>='0' && str<='9'; i++) // 如果是數字,則繼續(xù)轉換
  value = value * 10 + (str - '0');
 return sign * value;
}

int main(int argc, char *argv[]) {
 char *str = "-123.45CS67"; 
 int  val  = str2int(str);
 printf("str=%s\tval=%d\n", str, val);
}

19、歌德巴赫猜想。任何一個偶數都可以分解為兩個素數之和。(其實這是個C二級考試的模擬試題)
#include "stdafx.h"
#include "math.h"
int main(int argc, char* argv[]) {
 int Even=78, Prime1, Prime2, Tmp1, Tmp2;
 for(Prime1=3; Prime1<=Even/2; Prime1+=2) {
  for(Tmp1=2,Tmp2=sqrt(float(Prime1)); Tmp1<=Tmp2 && Prime1%Tmp1 != 0; Tmp1++);
  if(Tmp1<=Tmp2) continue;
  Prime2 = Even-Prime1;
  for(Tmp1=2,Tmp2=sqrt(float(Prime2)); Tmp1<=Tmp2 && Prime2%Tmp1 != 0; Tmp1++);
  if(Tmp1<=Tmp2) continue;
  printf("%d=%d+%d\n", Even, Prime1, Prime2);
 }
}

20、快速排序(東軟喜歡考類似的算法填空題,又如堆排序的算法等)
#include "stdafx.h"
#define N 10
int part(int list[], int low, int high) {  // 一趟排序,返回分割點位置
 int tmp = list[low];
 while(low<high) {
  while(low<high && list[high]>=tmp) --high;
  list[low] = list[high];
  while(low<high && list[low]<=tmp)  ++low;
  list[high] = list[low];
 }
 list[low] = tmp;
 return low;
}
void QSort(int list[], int low, int high) { // 應用遞歸進行快速排序
 if(low<high) {
  int mid = part(list, low, high);
  QSort(list, low, mid-1);
  QSort(list, mid+1, high);
 }
}
void show(int list[], int n) {    // 輸出列表中元素
 for(int i=0; i<n; i++)
  printf("%d ", list);
 printf("\n");
}
int main(int argc, char* argv[]) {
 int list[N] = {23, 65, 26, 1, 6, 89, 3, 12, 33, 8};
 show(list, N);      // 輸出排序前序列
 QSort(list, 0, N-1);     // 快速排序
 show(list, N);      // 輸出排序后序列
}

21、2005年11月23日慧通筆試題:寫一函數判斷某個整數是否為回文數,如12321為回文數。可以用判斷入棧和出棧是否相同來實現(略微復雜些),這里是將整數逆序后形成另一整數,判斷兩個整數是否相等來實現的。
#include "stdafx.h"
int IsEchoNum(int num) {
 int tmp = 0;
 for(int n = num; n; n/=10)
  tmp = tmp *10 + n%10;
 return tmp==num;
}

int main(int argc, char* argv[]) {
 int num = 12321;
 printf("%d  %d\n", num, IsEchoNum(num));
}

22、刪除字符串中的數字并壓縮字符串(神州數碼以前筆試題),如字符串”abc123de4fg56”處理后變?yōu)?#8221;abcdefg”。注意空間和效率。(下面的算法只需要一次遍歷,不需要開辟新空間,時間復雜度為O(N))
#include "stdafx.h"
void delNum(char *str) {
 int i, j=0;
// 找到串中第一個數字的位子
 for(i=j=0; str && (str<'0' || str>'9'); j=++i);
 
 // 從串中第一個數字的位置開始,逐個放入后面的非數字字符
 for(; str; i++)   
  if(str<'0' || str>'9') 
   str[j++] = str;
 str[j] = '\0';
}

int main(int argc, char* argv[]) {
 char str[] = "abc123ef4g4h5";
 printf("%s\n", str);
 delNum(str);
 printf("%s\n", str);
}

23、求兩個串中的第一個最長子串(神州數碼以前試題)。如"abractyeyt","dgdsaeactyey"的最大子串為"actyet"。
#include "stdafx.h"
char *MaxSubString(char *str1, char *str2) {
 int i, j, k, index, max=0;
 for(i=0; str1; i++)
  for(j=0; str2[j]; j++) {
   for(k=0; str1[i+k]==str2[j+k] && (str2[i+k] || str1[i+k]); k++);
   if(k>max) {  // 出現大于當前子串長度的子串,則替換子串位置和程度
    index = j; max = k;
   }
  }
 char *strResult = (char *)calloc(sizeof(char), max+1);
 for(i=0; i<max; i++)  
  strResult = str2[index++];
 return strResult;
}

int main(int argc, char* argv[]) {
 char str1[] = "abractyeyt", str2[] = "dgdsaeactyey";
 char *strResult = MaxSubString(str1, str2);
 printf("str1=%s\nstr2=%s\nMaxSubString=%s\n", str1, str2, strResult);
}

24、不開辟用于交換數據的臨時空間,如何完成字符串的逆序(在技術一輪面試中,有些面試官會這樣問)
#include "stdafx.h"
void change(char *str) {
 for(int i=0,j=strlen(str)-1; i<j; i++, j--){
  str ^= str[j] ^= str ^= str[j];
 }
}
int main(int argc, char* argv[]) {
 char str[] = "abcdefg";
 printf("strSource=%s\n", str);
 change(str);
 printf("strResult=%s\n", str);
 return getchar();
}

25、刪除串中指定的字符(做此題時,千萬不要開辟新空間,否則面試官可能認為你不適合做嵌入式開發(fā))
#include "stdafx.h"
void delChar(char *str, char c) {
 int i, j=0;
 for(i=0; str; i++)
  if(str!=c) str[j++]=str;
 str[j] = '\0';
}

int main(int argc, char* argv[]) {
 char str[] = "abcdefgh"; // 注意,此處不能寫成char *str = "abcdefgh";
 printf("%s\n", str);
 delChar(str, 'c');
 printf("%s\n", str);
}

26、判斷單鏈表中是否存在環(huán)(網上說的筆試題)
#include "stdafx.h"
typedef char eleType;    // 定義鏈表中的數據類型
typedef struct listnode  {   // 定義單鏈表結構
 eleType data;
 struct listnode *next;
}node;

node *create(int n) {    // 創(chuàng)建單鏈表,n為節(jié)點個數
 node *p = (node *)malloc(sizeof(node)); 
 node *head = p;  head->data = 'A';
 for(int i='B'; i<'A'+n; i++) {
  p = (p->next = (node *)malloc(sizeof(node)));
  p->data = i;
  p->next = NULL;
 }
 return head;
}

void addCircle(node *head, int n) { // 增加環(huán),將鏈尾指向鏈中第n個節(jié)點
 node *q, *p = head;
 for(int i=1; p->next; i++) {
  if(i==n) q = p;
  p = p->next;
 }
 p->next = q;
}

int isCircle(node *head) {   // 這是筆試時需要寫的最主要函數,其他函數可以不寫
 node *p=head,*q=head; 
 while( p->next && q->next) { 
  p = p->next;
  if (NULL == (q=q->next->next)) return 0;
  if (p == q) return 1;
 }
 return 0; 
}

int main(int argc, char* argv[]) {
 node *head = create(12);
 addCircle(head, 8);   // 注釋掉此行,連表就沒有環(huán)了
 printf("%d\n", isCircle(head));
}

posted on 2012-06-03 12:02 chatler 閱讀(584) 評論(0)  編輯 收藏 引用 所屬分類: interview
<2009年5月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

常用鏈接

留言簿(10)

隨筆分類(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

  • cloudward
  • 感覺這個博客還是不錯,雖然做的東西和我不大相關,覺得看看還是有好處的

network

OSS

  • Google Android
  • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
  • os161 file list

overall

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品久在线观看| 欧美成人午夜剧场免费观看| 欧美性大战久久久久久久| 亚洲精品国产精品国自产观看| 亚洲国产精品一区二区第四页av| 欧美福利视频| 一区二区三区欧美亚洲| 欧美一区免费视频| 在线观看中文字幕亚洲| 欧美理论在线播放| 亚洲欧美日韩国产一区二区三区 | 日韩亚洲不卡在线| 国产精品久久久久久久久| 欧美在线999| 欧美黄色免费网站| 亚洲已满18点击进入久久| 国内精品久久久久影院优| 蜜臀av性久久久久蜜臀aⅴ| 99亚洲伊人久久精品影院红桃| 欧美在线视频在线播放完整版免费观看| 国外成人在线视频网站| 欧美日韩国内| 久久精品一区蜜桃臀影院| 亚洲精品美女在线观看播放| 久久精品国产免费| 一本一本久久| 国产一区二区三区四区在线观看 | 久久精品国产91精品亚洲| 亚洲国产精品va在线看黑人动漫 | 久久国产乱子精品免费女 | 欧美婷婷在线| 久久久www成人免费精品| 99精品99| 欧美成人综合一区| 欧美一区二区三区免费观看视频| 91久久国产综合久久91精品网站| 国产九九精品| 欧美日韩成人综合在线一区二区| 久久gogo国模裸体人体| 亚洲视频观看| 91久久久国产精品| 老牛嫩草一区二区三区日本| 午夜精品成人在线| 日韩一区二区精品视频| 狠狠色狠狠色综合日日五| 国产精品福利在线观看网址| 免费在线观看日韩欧美| 久久精品国产欧美激情| 亚洲亚洲精品在线观看| 日韩亚洲在线观看| 91久久夜色精品国产九色| 免费亚洲电影在线| 久久综合久色欧美综合狠狠| 午夜综合激情| 亚洲综合日韩| 亚洲一区二区精品视频| 夜夜嗨网站十八久久| 亚洲日本免费电影| 在线观看av一区| 黄色小说综合网站| 国产日韩专区在线| 国产日韩免费| 国产农村妇女精品| 国产欧美精品日韩| 国产日韩av高清| 国产美女精品免费电影| 国产精品一区二区欧美| 国产精品一区一区三区| 国产乱肥老妇国产一区二| 国产精品久久91| 国产精品久久久久高潮| 国产精品v欧美精品v日韩精品| 欧美日韩免费观看一区三区| 欧美日韩日本国产亚洲在线| 欧美日韩国产精品| 欧美日韩亚洲视频| 欧美色另类天堂2015| 欧美系列精品| 国产精品综合网站| 国产在线欧美日韩| 亚洲成在线观看| 亚洲精品黄色| 亚洲图片在线观看| 午夜精品视频一区| 久久久精品2019中文字幕神马| 久久男人资源视频| 欧美粗暴jizz性欧美20| 亚洲日本视频| 亚洲综合色噜噜狠狠| 欧美一区二区视频在线| 久久蜜桃精品| 欧美国产精品| 国产精品一页| 亚洲国产国产亚洲一二三| 亚洲人成高清| 午夜欧美视频| 免费成人av在线看| 亚洲美女黄色片| 亚洲欧美日韩国产中文在线| 久久精品一区二区三区中文字幕| 女生裸体视频一区二区三区| 欧美视频在线免费| 国产一区二区三区四区五区美女| 亚洲国产综合视频在线观看| 一区二区高清在线| 久久精品久久综合| 最新亚洲一区| 久久国产婷婷国产香蕉| 欧美国产精品人人做人人爱| 国产精品夜夜嗨| 亚洲精品免费一二三区| 午夜宅男久久久| 欧美电影免费观看高清| 在线综合欧美| 男女视频一区二区| 国产欧美大片| 99av国产精品欲麻豆| 久久久久免费视频| 日韩视频在线一区| 久久亚洲不卡| 国产精品免费看| 亚洲区一区二区三区| 欧美伊人精品成人久久综合97| 欧美激情一区二区三区| 亚洲一区欧美| 欧美另类一区二区三区| 黄色成人免费网站| 亚洲自拍偷拍网址| 亚洲福利视频免费观看| 欧美一区二区三区在| 欧美日韩影院| 亚洲精品乱码久久久久久| 久久福利资源站| 在线性视频日韩欧美| 欧美成人一区二区在线| 国产一区二区福利| 亚洲欧美日韩爽爽影院| 亚洲激情视频网| 两个人的视频www国产精品| 国产精品区一区二区三| 99国产精品久久久久久久久久| 另类欧美日韩国产在线| 香蕉免费一区二区三区在线观看| 欧美日韩精品一区| 亚洲精品欧洲| 欧美激情视频网站| 久久久亚洲高清| 狠狠色噜噜狠狠狠狠色吗综合| 欧美亚洲综合另类| 亚洲网站啪啪| 国产精品久久久久久影视 | 亚洲精品一区二区三区樱花| 免播放器亚洲一区| 久久国产88| 国产在线成人| 久久精品亚洲| 欧美一区二区视频网站| 国产欧美一区二区三区久久 | 久久精品日产第一区二区三区| 亚洲一区视频在线| 国产精品乱码一区二三区小蝌蚪| 亚洲午夜精品久久久久久浪潮 | 先锋影院在线亚洲| 亚洲一区一卡| 国产视频一区在线| 久久九九免费| 久久久精品国产99久久精品芒果| 国产一区二区日韩精品| 久久久免费观看视频| 久久精品毛片| 亚洲高清激情| 亚洲人成人77777线观看| 欧美精品一区二区高清在线观看| 亚洲精品国产精品久久清纯直播| 亚洲电影免费在线 | 欧美日韩在线电影| 亚洲一区二区黄色| 亚洲欧美日韩天堂| 国产一区二区三区在线观看免费视频 | 久久久女女女女999久久| 久久se精品一区二区| 亚洲成色777777女色窝| 亚洲第一在线视频| 欧美日韩一卡二卡| 欧美一区二区三区电影在线观看| 久久爱www| 亚洲精品日韩激情在线电影| 亚洲麻豆视频| 国产欧美精品| 欧美黄色小视频| 欧美视频网站| 久久久久www| 欧美国产一区视频在线观看| 亚洲一区二区三区涩| 久久成人精品电影| 99精品99久久久久久宅男| 亚洲欧美日本日韩| 亚洲国产第一| 中文在线一区| 亚洲电影观看|