• <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>

            HyJune的專欄

            Linux From Scratch

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              10 隨筆 :: 11 文章 :: 6 評論 :: 0 Trackbacks
            from: http://blog.csdn.net/fansnaf/archive/2006/11/03/1364447.aspx

            本人很弱,這幾個題也搞不定,特來求救:
            1)讀文件file1.txt的內容(例如):
            12
            34
            56
            輸出到file2.txt:
            56
            34
            12
            (逆序)
            2)輸出和為一個給定整數的所有組合
            例如n=5
            5=1+4;5=2+3(相加的數不能重復)
            則輸出
            1,4;2,3。
            望高手賜教!!

            第一題,注意可增長數組的應用.
            #include <stdio.h>
            #include <stdlib.h>

            int main(void)
            {
            int MAX = 10;
            int *a = (int *)malloc(MAX * sizeof(int));
            int *b;

            FILE *fp1;
            FILE *fp2;

            fp1 = fopen("a.txt","r");
            if(fp1 == NULL)
            {printf("error1");
            exit(-1);
            }

            fp2 = fopen("b.txt","w");
            if(fp2 == NULL)
            {printf("error2");
            exit(-1);
            }

            int i = 0;
            int j = 0;

            while(fscanf(fp1,"%d",&a[i]) != EOF)
            {
            i++;
            j++;
            if(i >= MAX)
            {
            MAX = 2 * MAX;
            b = (int*)realloc(a,MAX * sizeof(int));
            if(b == NULL)
            {
            printf("error3");
            exit(-1);
            }
            a = b;
            }
            }

            for(;--j >= 0;)
            fprintf(fp2,"%d\n",a[j]);

            fclose(fp1);
            fclose(fp2);

            return 0;


            }

            第二題.
            #include <stdio.h>

            int main(void)
            {
            unsigned long int i,j,k;

            printf("please input the number\n");
            scanf("%d",&i);
            if( i % 2 == 0)
            j = i / 2;
            else
            j = i / 2 + 1;

            printf("The result is \n");
            for(k = 0; k < j; k++)
            printf("%d = %d + %d\n",i,k,i - k);
            return 0;
            }

            #include <stdio.h>
            void main()
            {
            unsigned long int a,i=1;
            scanf("%d",&a);
            if(a%2==0)
            {
            for(i=1;i<a/2;i++)
            printf("%d",a,a-i);
            }
            else
            for(i=1;i<=a/2;i++)
            printf(" %d, %d",i,a-i);
            }

            兄弟,這樣的題目若是做不出來實在是有些不應該, 給你一個遞規反向輸出字符串的例子,可謂是反序的經典例程.

            void inverse(char *p)
            {
            if( *p = = '\0' )
            return;
            inverse( p+1 );
            printf( "%c", *p );
            }

            int main(int argc, char *argv[])
            {
            inverse("abc\0");

            return 0;
            }

            借簽了樓上的“遞規反向輸出”
            #include <stdio.h>
            void test(FILE *fread, FILE *fwrite)
            {
            char buf[1024] = {0};
            if (!fgets(buf, sizeof(buf), fread))
            return;
            test( fread, fwrite );
            fputs(buf, fwrite);
            }
            int main(int argc, char *argv[])
            {
            FILE *fr = NULL;
            FILE *fw = NULL;
            fr = fopen("data", "rb");
            fw = fopen("dataout", "wb");
            test(fr, fw);
            fclose(fr);
            fclose(fw);
            return 0;
            }

            在對齊為4的情況下
            struct BBB
            {
            long num;
            char *name;
            short int data;
            char ha;
            short ba[5];
            }*p;
            p=0x1000000;
            p+0x200=____;
            (Ulong)p+0x200=____;
            (char*)p+0x200=____;
            希望各位達人給出答案和原因,謝謝拉
            解答:假設在32位CPU上,
            sizeof(long) = 4 bytes
            sizeof(char *) = 4 bytes
            sizeof(short int) = sizeof(short) = 2 bytes
            sizeof(char) = 1 bytes

            由于是4字節對齊,
            sizeof(struct BBB) = sizeof(*p)
            = 4 + 4 + 2 + 1 + 1/*補齊*/ + 2*5 + 2/*補齊*/ = 24 bytes (經Dev-C++驗證)

            p=0x1000000;
            p+0x200=____;
            = 0x1000000 + 0x200*24

            (Ulong)p+0x200=____;
            = 0x1000000 + 0x200

            (char*)p+0x200=____;
            = 0x1000000 + 0x200*4

            你可以參考一下指針運算的細節


            寫 一段程序,找出數組中第k大小的數,輸出數所在的位置。例如{2,4,3,4,7}中,第一大的數是7,位置在4。第二大、第三大的數都是4,位置在1、 3隨便輸出哪一個均可。函數接口為:int find_orderk(const int* narry,const int n,const int k)
            要求算法復雜度不能是O(n^2)
            謝謝!
            可以先用快速排序進行排序,其中用另外一個進行地址查找
            代碼如下,在VC++6.0運行通過。給分吧^-^

            //快速排序

            #include<iostream>

            usingnamespacestd;

            intPartition (int*L,intlow,int high)
            {
            inttemp = L[low];
            intpt = L[low];

            while (low < high)
            {
            while (low < high && L[high] >= pt)
            --high;
            L[low] = L[high];
            while (low < high && L[low] <= pt)
            ++low;
            L[low] = temp;
            }
            L[low] = temp;

            returnlow;
            }

            voidQSort (int*L,intlow,int high)
            {
            if (low < high)
            {
            intpl = Partition (L,low,high);

            QSort (L,low,pl - 1);
            QSort (L,pl + 1,high);
            }
            }

            intmain ()
            {
            intnarry[100],addr[100];
            intsum = 1,t;

            cout << "Input number:" << endl;
            cin >> t;

            while (t != -1)
            {
            narry[sum] = t;
            addr[sum - 1] = t;
            sum++;

            cin >> t;
            }

            sum -= 1;
            QSort (narry,1,sum);

            for (int i = 1; i <= sum;i++)
            cout << narry[i] << '\t';
            cout << endl;

            intk;
            cout << "Please input place you want:" << endl;
            cin >> k;

            intaa = 1;
            intkk = 0;
            for (;;)
            {
            if (aa == k)
            break;
            if (narry[kk] != narry[kk + 1])
            {
            aa += 1;
            kk++;
            }

            }

            cout << "The NO." << k << "number is:" << narry[sum - kk] << endl;
            cout << "And it's place is:" ;
            for (i = 0;i < sum;i++)
            {
            if (addr[i] == narry[sum - kk])
            cout << i << '\t';
            }


            return0;
            }

            1、找錯
            Void test1()
            {
            char string[10];
            char* str1="0123456789";
            strcpy(string, str1);// 溢出,應該包括一個存放'\0'的字符string[11]
            }


            Void test2()
            {
            char string[10], str1[10];
            for(I=0; I<10;I++)
            {
            str1[i] ='a';
            }
            strcpy(string, str1);// I,i沒有聲明。
            }

            Void test3(char* str1)
            {
            char string[10];
            if(strlen(str1)<=10)// 改成<10,字符溢出,將strlen改為sizeof也可以
            {
            strcpy(string, str1);
            }
            }

            2.
            void g(int**);
            int main()
            {
            int line[10],i;
            int *p=line; //p是地址的地址
            for (i=0;i<10;i++)
            {
            *p=i;
            g(&p);//數組對應的值加1
            }
            for(i=0;i<10;i++)
            printf("%d\n",line[i]);
            return 0;
            }

            void g(int**p)
            {
            (**p)++;
            (*p)++;// 無效
            }
            輸出:
            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            3. 寫出程序運行結果

            int sum(int a)
            {
            auto int c=0;
            static int b=3;
            c+=1;
            b+=2;
            return(a+b+c);
            }

            void main()
            {
            int I;
            int a=2;
            for(I=0;I<5;I++)
            {
            printf("%d,", sum(a));
            }
            }
            // static會保存上次結果,記住這一點,剩下的自己寫
            輸出:8,10,12,14,16,


            4.

            int func(int a)
            {
            int b;
            switch(a)
            {
            case 1: 30;
            case 2: 20;
            case 3: 16;
            default: 0
            }
            return b;
            }
            則func(1)=?
            // b定義后就沒有賦值。

            5:
            int a[3];
            a[0]=0; a[1]=1; a[2]=2;
            int *p, *q;
            p=a;
            q=&a[2];
            則a[q-p]=a[2]
            解釋:指針一次移動一個int但計數為1

            今天早上的面試題9道,比較難,向牛人請教,國內的一牛公司,坐落在北京北四環某大廈:
            1、線形表a、b為兩個有序升序的線形表,編寫一程序,使兩個有序線形表合并成一個有序升序線形表h;
            答案在 請化大學 嚴銳敏《數據結構第二版》第二章例題,數據結構當中,這個叫做:兩路歸并排序
            Linklist *unio(Linklist *p,Linklist *q){
            linklist *R,*pa,*qa,*ra;
            pa=p;
            qa=q;
            R=ra=p;
            while(pa->next!=NULL&&qa->next!=NULL){
            if(pa->data>qa->data){
            ra->next=qa;
            qa=qa->next;
            }
            else{
            ra->next=pa;
            pa=pa->next;
            }
            }
            if(pa->next!=NULL)
            ra->next=pa;
            if(qa->next!=NULL)
            ra->next==qa;
            return R;
            }
            2、運用四色定理,為N個局域舉行配色,顏色為1、2、3、4四種,另有數組adj[][N],如adj[i][j]=1則表示i區域與j區域相鄰,數組color[N],如color[i]=1,表示i區域的顏色為1號顏色。
            四色填充
            3、用遞歸算法判斷數組a[N]是否為一個遞增數組。
            遞歸的方法,記錄當前最大的,并且判斷當前的是否比這個還大,大則繼續,否則返回false結束:
            bool fun( int a[], int n )
            {
            if( n= =1 )
            return true;
            if( n= =2 )
            return a[n-1] >= a[n-2];
            return fun( a,n-1) && ( a[n-1] >= a[n-2] );
            }
            4、編寫算法,從10億個浮點數當中,選出其中最大的10000個。
            用外部排序,在《數據結構》書上有
            《計算方法導論》在找到第n大的數的算法上加工
            5、編寫一unix程序,防止僵尸進程的出現.

            同學的4道面試題,應聘的職位是搜索引擎工程師,后兩道超級難,(希望大家多給一些算發)
            1.給兩個數組和他們的大小,還有一動態開辟的內存,求交集,把交集放到動態內存dongtai,并且返回交集個數
            long jiaoji(long* a[],long b[],long* alength,long blength,long* dongtai[])
            2.單連表的建立,把'a'--'z'26個字母插入到連表中,并且倒敘,還要打印!
            方法1:
            typedef struct val
            { int date_1;
            struct val *next;
            }*p;

            void main(void)
            { char c;

            for(c=122;c>=97;c--)
            { p.date=c;
            p=p->next;
            }

            p.next=NULL;
            }
            }
            方法2:
            node *p = NULL;
            node *q = NULL;

            node *head = (node*)malloc(sizeof(node));
            head->data = ' ';head->next=NULL;

            node *first = (node*)malloc(sizeof(node));
            first->data = 'a';first->next=NULL;head->next = first;
            p = first;

            int longth = 'z' - 'b';
            int i=0;
            while ( i<=longth )
            {
            node *temp = (node*)malloc(sizeof(node));
            temp->data = 'b'+i;temp->next=NULL;q=temp;

            head->next = temp; temp->next=p;p=q;
            i++;
            }

            print(head);

            3.可怕的題目終于來了
            象搜索的輸入信息是一個字符串,統計300萬輸入信息中的最熱門的前十條,我們每次輸入的一個字符串為不超過255byte,內存使用只有1G,
            請描述思想,寫出算發(c語言),空間和時間復雜度,
            4.國內的一些帖吧,如baidu,有幾十萬個主題,假設每一個主題都有上億的跟帖子,怎么樣設計這個系統速度最好,請描述思想,寫出算發(c語言),空間和時間復雜度,


            #include string.h
            main(void)
            { char *src="hello,world";
            char *dest=NULL;
            dest=(char *)malloc(strlen(src));
            int len=strlen(str);
            char *d=dest;
            char *s=src[len];
            while(len--!=0)
            d++=s--;
            printf("%s",dest);
            }
            找出錯誤!!
            #include "string.h"
            #include "stdio.h"
            #include "malloc.h"
            main(void)
            {
            char *src="hello,world";
            char *dest=NULL;
            dest=(char *)malloc(sizeof(char)*(strlen(src)+1));
            int len=strlen(src);
            char *d=dest;
            char *s=src+len-1;
            while(len--!=0)
            *d++=*s--;
            *d='\0';
            printf("%s",dest);
            }

            1. 簡述一個Linux驅動程序的主要流程與功能。

            2. 請列舉一個軟件中時間換空間或者空間換時間的例子。
            void swap(int a,int b)
            {
            int c; c=a;a=b;b=a;
            }
            --->空優
            void swap(int a,int b)
            {
            a=a+b;b=a-b;a=a-b;
            }
            6. 請問一下程序將輸出什么結果?
            char *RetMenory(void)
            {
            char p[] = “hellow world”;
            return p;
            }
            void Test(void)
            {
            char *str = NULL;
            str = RetMemory();
            printf(str);
            }
            RetMenory執行完畢,p資源被回收,指向未知地址。返回地址,str的內容應是不可預測的, 打印的應該是str的地址


            寫一個函數,它的原形是int continumax(char *outputstr,char *intputstr)
            功能:
            在字符串中找出連續最長的數字串,并把這個串的長度返回,并把這個最長數字串付給其中一個函數參數outputstr所指內存。例如:"abcd12345ed125ss123456789"的首地址傳給intputstr后,函數將返回
            9,outputstr所指的值為123456789
            int continumax(char *outputstr, char *inputstr)
            {
            char *in = inputstr, *out = outputstr, *temp, *final;
            int count = 0, maxlen = 0;

            while( *in != '\0' )
            {
            if( *in > 47 && *in < 58 )
            {
            for(temp = in; *in > 47 && *in < 58 ; in++ )
            count++;
            }
            else
            in++;

            if( maxlen < count )
            {
            maxlen = count;
            count = 0;
            final = temp;
            }
            }
            for(int i = 0; i < maxlen; i++)
            {
            *out = *final;
            out++;
            final++;
            }
            *out = '\0';
            return maxlen;
            }

            不用庫函數,用C語言實現將一整型數字轉化為字符串
            方法1:
            int getlen(char *s){
            int n;
            for(n = 0; *s != '\0'; s++)
            n++;
            return n;
            }
            void reverse(char s[])
            {
            int c,i,j;
            for(i = 0,j = getlen(s) - 1; i < j; i++,j--){
            c = s[i];
            s[i] = s[j];
            s[j] = c;
            }
            }
            void itoa(int n,char s[])
            {
            int i,sign;
            if((sign = n) < 0)
            n = -n;
            i = 0;
            do{/*以反序生成數字*/
            s[i++] = n%10 + '0';/*get next number*/
            }while((n /= 10) > 0);/*delete the number*/

            if(sign < 0)
            s[i++] = '-';

            s[i] = '\0';
            reverse(s);
            }
            方法2:
            #include <iostream>
            using namespace std;

            void itochar(int num);

            void itochar(int num)
            {
            int i = 0;
            int j ;
            char stra[10];
            char strb[10];
            while ( num )
            {
            stra[i++]=num%10+48;
            num=num/10;
            }
            stra[i] = '\0';
            for( j=0; j < i; j++)
            {
            strb[j] = stra[i-j-1];
            }
            strb[j] = '\0';
            cout<<strb<<endl;

            }
            int main()
            {
            int num;
            cin>>num;
            itochar(num);
            return 0;
            }

            前幾天面試,有一題想不明白,請教大家!
            typedef struct
            {
            int a:2;
            int b:2;
            int c:1;
            }test;

            test t;
            t.a = 1;
            t.b = 3;
            t.c = 1;

            printf("%d",t.a);
            printf("%d",t.b);
            printf("%d",t.c);

            謝謝!
            t.a為01,輸出就是1
            t.b為11,輸出就是-1
            t.c為1,輸出也是-1
            3個都是有符號數int嘛。
            這是位擴展問題
            01
            11
            1
            編譯器進行符號擴展


            求組合數: 求n個數(1....n)中k個數的組合....
            如:combination(5,3)
            要求輸出:543,542,541,532,531,521,432,431,421,321,
            #include<stdio.h>

            int pop(int *);
            int push(int );
            void combination(int ,int );

            int stack[3]={0};
            top=-1;

            int main()
            {
            int n,m;
            printf("Input two numbers:\n");
            while( (2!=scanf("%d%*c%d",&n,&m)) )
            {
            fflush(stdin);
            printf("Input error! Again:\n");
            }
            combination(n,m);
            printf("\n");
            }
            void combination(int m,int n)
            {
            int temp=m;
            push(temp);
            while(1)
            {
            if(1==temp)
            {
            if(pop(&temp)&&stack[0]==n) //當棧底元素彈出&&為可能取的最小值,循環退出
            break;
            }
            else if( push(--temp))
            {
            printf("%d%d%d ",stack[0],stack[1],stack[2]);//§&auml;¨ì¤@?
            pop(&temp);
            }
            }
            }
            int push(int i)
            {
            stack[++top]=i;
            if(top<2)
            return 0;
            else
            return 1;
            }
            int pop(int *i)
            {
            *i=stack[top--];
            if(top>=0)
            return 0;
            else
            return 1;
            }

            1、用指針的方法,將字符串“ABCD1234efgh”前后對調顯示
            #include <stdio.h>
            #include <string.h>
            #include <dos.h>
            int main()
            {
            char str[] = "ABCD1234efgh";
            int length = strlen(str);
            char * p1 = str;
            char * p2 = str + length - 1;
            while(p1 < p2)
            {
            char c = *p1;
            *p1 = *p2;
            *p2 = c;
            ++p1;
            --p2;
            }
            printf("str now is %s\n",str);
            system("pause");
            return 0;
            }
            2、有一分數序列:1/2,1/4,1/6,1/8……,用函數調用的方法,求此數列前20項的和
            #include <stdio.h>
            double getValue()
            {
            double result = 0;
            int i = 2;
            while(i < 42)
            {
            result += 1.0 / i;//一定要使用1.0做除數,不能用1,否則結果將自動轉化成整數,即0.000000
            i += 2;
            }
            return result;
            }
            int main()
            {
            printf("result is %f\n", getValue());
            system("pause");
            return 0;
            }

            有一個數組a[1000]存放0--1000;要求每隔二個數刪掉一個數,到末尾時循環至開頭繼續進行,求最后一個被刪掉的數的原始下標位置。
            以7個數為例:
            {0,1,2,3,4,5,6,7} 0-->1-->2(刪除)-->3-->4-->5(刪除)-->6-->7-->0(刪除),如此循環直到最后一個數被刪除。
            方法1:數組
            #include <iostream>
            using namespace std;
            #define null 1000

            int main()
            {
            int arr[1000];
            for (int i=0;i<1000;++i)
            arr[i]=i;
            int j=0;
            int count=0;
            while(count<999)
            {
            while(arr[j%1000]==null)
            j=(++j)%1000;
            j=(++j)%1000;
            while(arr[j%1000]==null)
            j=(++j)%1000;
            j=(++j)%1000;
            while(arr[j%1000]==null)
            j=(++j)%1000;
            arr[j]=null;
            ++count;
            }
            while(arr[j]==null)
            j=(++j)%1000;

            cout<<j<<endl;
            return 0;
            }方法2:鏈表
            #include<iostream>
            using namespace std;
            #define null 0
            struct node
            {
            int data;
            node* next;
            };
            int main()
            {
            node* head=new node;
            head->data=0;
            head->next=null;
            node* p=head;
            for(int i=1;i<1000;i++)
            {
            node* tmp=new node;
            tmp->data=i;
            tmp->next=null;
            head->next=tmp;
            head=head->next;
            }
            head->next=p;
            while(p!=p->next)
            {
            p->next->next=p->next->next->next;
            p=p->next->next;
            }
            cout<<p->data;
            return 0;
            }
            方法3:通用算法
            #include <stdio.h>
            #define MAXLINE 1000 //元素個數
            /*
            MAXLINE 元素個數
            a[] 元素數組
            R[] 指針場
            suffix 下標
            index 返回最后的下標序號
            values 返回最后的下標對應的值
            start 從第幾個開始
            K 間隔
            */
            int find_n(int a[],int R[],int K,int& index,int& values,int s=0) {
            int suffix;
            int front_node,current_node;
            suffix=0;
            if(s==0) {
            current_node=0;
            front_node=MAXLINE-1;
            }
            else {
            current_node=s;
            front_node=s-1;
            }
            while(R[front_node]!=front_node) {
            printf("%d\n",a[current_node]);
            R[front_node]=R[current_node];
            if(K==1) {
            current_node=R[front_node];
            continue;
            }
            for(int i=0;i<K;i++){
            front_node=R[front_node];
            }
            current_node=R[front_node];
            }
            index=front_node;
            values=a[front_node];

            return 0;
            }
            int main(void) {
            int a[MAXLINE],R[MAXLINE],suffix,index,values,start,i,K;
            suffix=index=values=start=0;
            K=2;

            for(i=0;i<MAXLINE;i++) {
            a[i]=i;
            R[i]=i+1;
            }
            R[i-1]=0;
            find_n(a,R,K,index,values,2);
            printf("the value is %d,%d\n",index,values);
            return 0;
            }

            試題:
            void test2()
            {
            char string[10], str1[10];
            int i;
            for(i=0; i<10; i++)
            {
            str1[i] = 'a';
            }
            strcpy( string, str1 );
            }
            解 答:對試題2,如果面試者指出字符數組str1不能在數組內結束可以給3分;如果面試者指出strcpy(string, str1)調用使得從str1內存起復制到string內存起所復制的字節數具有不確定性可以給7分,在此基礎上指出庫函數strcpy工作方式的給10 分;
            str1不能在數組內結束:因為str1的存儲為:{a,a,a,a,a,a,a,a,a,a},沒有'\0'(字符串結束符),所以不能結束
            strcpy( char *s1,char *s2)他的工作原理是,掃描s2指向的內存,逐個字符付到s1所指向的內存,直到碰到'\0',因為str1結尾沒有'\0',所以具有不確定性,不知道他后面還會付什么東東。
            正確應如下
            void test2()
            {
            char string[10], str1[10];
            int i;
            for(i=0; i<9; i++)
            {
            str1[i] = 'a'+i; //把abcdefghi賦值給字符數組
            }
            str[i]='\0';//加上結束符
            strcpy( string, str1 );
            }

            第二個code題是實現strcmp
            int StrCmp(const char *str1, const char *str2)
            做是做對了,沒有抄搞,比較亂
            int StrCmp(const char *str1, const char *str2)
            {
            assert(str1 && srt2);
            while (*str1 && *str2 && *str1 == *str2) {
            str1++, str2++;
            }
            if (*str1 && *str2)
            return (*str1-*str2);
            elseif (*str1 && *str2==0)
            return 1;
            elseif (*str1 = = 0 && *str2)
            return -1;
            else
            return 0;
            }

            int StrCmp(const char *str1, const char *str2)
            {
            //省略判斷空指針(自己保證)
            while(*str1 && *str1++ = = *str2++);
            return *str1-*str2;
            }
            第三個code題是實現子串定位
            int FindSubStr(const char *MainStr, const char *SubStr)
            做是做對了,沒有抄搞,比較亂
            int MyStrstr(const char* MainStr, const char* SubStr)
            {
            const char *p;
            const char *q;
            const char * u = MainStr;

            //assert((MainStr!=NULL)&&( SubStr!=NULL));//用斷言對輸入進行判斷
            while(*MainStr) //內部進行遞增
            {
            p = MainStr;
            q = SubStr;
            while(*q && *p && *p++ == *q++);
            if(!*q )
            {
            return MainStr - u +1 ;//MainStr指向當前起始位,u指向
            }
            MainStr ++;
            }
            return -1;
            }

            分析:
            int arr[] = {6,7,8,9,10};
            int *ptr = arr;
            *(ptr++)+=123;
            printf(“ %d %d ”, *ptr, *(++ptr));
            輸出:8 8
            過程:對于*(ptr++)+=123;先做加法6+123,然后++,指針指向7;對于printf(“ %d %d ”, *ptr, *(++ptr));從后往前執行,指針先++,指向8,然后輸出8,緊接著再輸出8

            華為全套完整試題
            高級題
            6、已知一個單向鏈表的頭,請寫出刪除其某一個結點的算法,要求,先找到此結點,然后刪除。
            slnodetype *Delete(slnodetype *Head,int key){}中if(Head->number==key)
            {
            Head=Pointer->next;
            free(Pointer);
            break;
            }
            Back = Pointer;
            Pointer=Pointer->next;
            if(Pointer->number==key)
            {
            Back->next=Pointer->next;
            free(Pointer);
            break;
            }
            void delete(Node* p)
            {
            if(Head = Node)

            while(p)
            }

            有一個16位的整數,每4位為一個數,寫函數求他們的和。
            解釋:
            整數1101010110110111
            和 1101+0101+1011+0111
            感覺應該不難,當時對題理解的不是很清楚,所以寫了一個函數,也不知道對不對。
            疑問:
            既然是16位的整數,1101010110110111是2進制的,那么函數參數怎么定義呢,請大蝦指教。
            答案:用十進制做參數,計算時按二進制考慮。
            /* n就是16位的數,函數返回它的四個部分之和 */
            char SumOfQuaters(unsigned short n)
            {
            char c = 0;
            int i = 4;
            do
            {
            c += n & 15;
            n = n >> 4;
            } while (--i);

            return c;
            }



            有1,2,....一直到n的無序數組,求排序算法,并且要求時間復雜度為O(n),空間復雜度O(1),使用交換,而且一次只能交換兩個數.(華為)
            #include<iostream.h>

            int main()
            {
            int a[] = {10,6,9,5,2,8,4,7,1,3};
            int len = sizeof(a) / sizeof(int);
            int temp;

            for(int i = 0; i < len; )
            {
            temp = a[a[i] - 1];
            a[a[i] - 1] = a[i];
            a[i] = temp;

            if ( a[i] == i + 1)
            i++;
            }
            for (int j = 0; j < len; j++)
            cout<<a[j]<<",";

            return 0;
            }

            (慧通)
            1 寫出程序把一個鏈表中的接點順序倒排
            typedef struct linknode
            {
            int data;
            struct linknode *next;
            }node;
            //將一個鏈表逆置
            node *reverse(node *head)
            {
            node *p,*q,*r;
            p=head;
            q=p->next;
            while(q!=NULL)
            {
            r=q->next;
            q->next=p;
            p=q;
            q=r;
            }

            head->next=NULL;
            head=p;
            return head;
            }
            2 寫出程序刪除鏈表中的所有接點
            void del_all(node *head)
            {
            node *p;
            while(head!=NULL)
            {
            p=head->next;
            free(head);
            head=p;
            }
            cout<<"釋放空間成功!"<<endl;
            }
            3兩個字符串,s,t;把t字符串插入到s字符串中,s字符串有足夠的空間存放t字符串
            void insert(char *s, char *t, int i)
            {
            char *q = t;
            char *p =s;
            if(q == NULL)return;
            while(*p!='\0')
            {
            p++;
            }
            while(*q!=0)
            {
            *p=*q;
            p++;
            q++;
            }
            *p = '\0';
            }


            分析下面的代碼:
            char *a = "hello";
            char *b = "hello";
            if(a= =b)
            printf("YES");
            else
            printf("NO");
            這個簡單的面試題目,我選輸出 no(對比的應該是指針地址吧),可在VC是YES 在C是NO
            lz的呢,是一個常量字符串。位于靜態存儲區,它在程序生命期內恒定不變。如果編譯器優化的話,會有可能a和b同時指向同一個hello的。則地址相同。如果編譯器沒有優化,那么就是兩個不同的地址,則不同

            posted on 2008-06-17 17:11 martin0501 閱讀(349) 評論(0)  編輯 收藏 引用 所屬分類: 6. 面試題集錦
            久久国产精品-国产精品| 久久精品人人槡人妻人人玩AV | 国产精品成人99久久久久| 久久精品国产免费一区| 久久精品国产精品亚洲| 久久香综合精品久久伊人| 久久精品国产亚洲精品2020| 精品久久香蕉国产线看观看亚洲| 国产精品免费久久| 久久久久亚洲AV无码永不| 久久97久久97精品免视看 | 精品一区二区久久| 亚洲欧美国产精品专区久久| 久久久久久伊人高潮影院| 99热精品久久只有精品| 久久精品国产乱子伦| 国产午夜精品理论片久久| 麻豆AV一区二区三区久久| 免费一级做a爰片久久毛片潮| 久久大香香蕉国产| 国产69精品久久久久APP下载| 国产日韩久久免费影院| 久久久久亚洲AV片无码下载蜜桃| 久久久久久久国产免费看| 久久国产高清字幕中文| 久久久无码人妻精品无码| 久久无码专区国产精品发布| 久久人搡人人玩人妻精品首页| 久久久精品免费国产四虎| 久久亚洲中文字幕精品有坂深雪| 伊人色综合久久天天人守人婷| 日本免费一区二区久久人人澡| 韩国免费A级毛片久久| 久久人人爽人人爽人人AV东京热| 久久久久亚洲AV无码专区首JN| 漂亮人妻被中出中文字幕久久| 久久精品无码专区免费| 久久久WWW成人免费精品| 欧美久久精品一级c片片| 色噜噜狠狠先锋影音久久| 99久久亚洲综合精品成人|