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

            X-Coder

            Kim4Apple
            posts - 1, comments - 0, trackbacks - 0, articles - 2

            筆試題 A (轉(zhuǎn))

            Posted on 2008-09-24 03:12 Kim4Apple 閱讀(214) 評(píng)論(0)  編輯 收藏 引用
            一、如何判斷一個(gè)單鏈表是有環(huán)的?(注意不能用標(biāo)志位,最多只能用兩個(gè)額外指針) struct node { char val; node* next;} bool check(const node* head) {} //return false : 無環(huán);true: 有環(huán) 一種O(n)的辦法就是(搞兩個(gè)指針,一個(gè)每次遞增一步,一個(gè)每次遞增兩步,如果有環(huán)的話兩者必然重合,反之亦然): bool check(const node* head) { if(head==NULL) return false; node *low=head, *fast=head->next; while(fast!=NULL && fast->next!=NULL) { low=low->next; fast=fast->next->next; if(low==fast) return true; } return false; } 二、刪除一個(gè)單項(xiàng)鏈表的最中間的元素,要求時(shí)間盡可能短(不能使用兩次循環(huán)) struct link { int data; struct link *next; }; void delMiddle(link *head) { if(head == NULL) return; else if(head->next == NULL) { delete head; return; } else { link *low = head; link *fast = head->next; while(fast != NULL && fast->next != NULL) { fast = fast->next->next; if(fast == NULL) break; low = low->next; } link *temp = low->next; low->next = low->next->next; delete temp; } } int main() { struct link *head,*l; struct link *s; head = (link*)malloc(sizeof(link)); head->data=0; head->next = NULL; l = head; for(int i=1; i<9; i++) { s = (link*)malloc(sizeof(link)); s->data = i; s->next = NULL; l->next= s; l = l->next; } print(head); delMiddle(head); print(head); return 0; } 三、輸入n,求一個(gè)n*n矩陣,規(guī)定矩陣沿45度線遞增(威盛) /** * 得到如下樣式的二維數(shù)組 * zigzag(jpeg編碼里取象素?cái)?shù)據(jù)的排列順序) * * 0, 1, 5, 6,14,15,27,28, * 2, 4, 7,13,16,26,29,42, * 3, 8,12,17,25,30,41,43, * 9,11,18,24,31,40,44,53, * 10,19,23,32,39,45,52,54, * 20,22,33,38,46,51,55,60, * 21,34,37,47,50,56,59,61, * 35,36,48,49,57,58,62,63 */ void zigzag(int n) { int **a =(int**) malloc(n*sizeof(int *)); //分配空間 if(NULL == a) return ; int i; for(i = 0; i < n; i++) { if((a[i] =(int*) malloc(n * sizeof(int))) == NULL) { while(--i>=0) free(a[i]); free(a); return; } } bool flag = false; //這個(gè)標(biāo)志位用來判斷是從45度角生成還是225度角生成 int count = 0; for(i=0; i=0; r--) { a[r][i-r] = count; count++; } flag = true; } } for(i=n-1; i>=0; i--) //生成的是下半部分的數(shù)據(jù) { // cout<=0; r--) { cout<<"ddd"<>n; zigzag(n); return 0; } 網(wǎng)上還有一個(gè)人寫了一個(gè)比較巧的算法: /** * 得到如下樣式的二維數(shù)組 * zigzag(jpeg編碼里取象素?cái)?shù)據(jù)的排列順序) * * 0, 1, 5, 6,14,15,27,28, * 2, 4, 7,13,16,26,29,42, * 3, 8,12,17,25,30,41,43, * 9,11,18,24,31,40,44,53, * 10,19,23,32,39,45,52,54, * 20,22,33,38,46,51,55,60, * 21,34,37,47,50,56,59,61, * 35,36,48,49,57,58,62,63 */ #include int main() { int N; int s, i, j; int squa; scanf("%d", &N); /* 分配空間 */ int **a = malloc(N * sizeof(int *)); if(a == NULL) return 0; for(i = 0; i < N; i++) { if((a[i] = malloc(N * sizeof(int))) == NULL) { while(--i>=0) free(a[i]); free(a); return 0; } } /* 數(shù)組賦值 */ squa = N*N; for(i = 0; i < N; i++) for(j = 0; j < N; j++) { s = i + j; if(s < N) a[i][j] = s*(s+1)/2 + (((i+j)%2 == 0)? i : j); else { s = (N-1-i) + (N-1-j); a[i][j] = squa - s*(s+1)/2 - (N - (((i+j)%2 == 0)? i : j)); } } /* 打印輸出 */ for(i = 0; i < N; i++) { for(j = 0; j < N; j++) printf("%-6d", a[i][j]); printf("\n"); } return 0; } 四、打印1到1000的整數(shù),不能使用流程控制語句(for,while,goto等)也不能使用遞歸 1. typedef struct _test{ static int a; _test(){ printf("%d\n",_test::a); a++; } }Test; int Test::a = 1; int main() { Test tt[1000]; return 0; } 2. #include #define B P,P,P,P,P,P,P,P,P,P #define P L,L,L,L,L,L,L,L,L,L #define L I,I,I,I,I,I,I,I,I,I,N #define I printf( "%3d ",i++) #define N printf( "\n ") int main() { int i = 1; B; } 或 #define A(x) x;x;x;x;x;x;x;x;x;x; int main () { int n = 1; A(A(A(printf ("%d ", n++)))); return 0; } 五、struct S { int i; int * p; }; void main() { S s; int * p = &s.i; p[0] = 4; p[1] = 3; s.p = p; s.p[1] = 1; s.p[0] = 2; } 問程序會(huì)在哪一行死掉。 (microsoft) 解: S s; int * p = &s.i; //s.i的地址存儲(chǔ)在p里 p[0] = 4; //修改了s.i p[1] = 3; //修改了s.p s.p = p; //s.p指向s.i s.p[1] = 1; //修改s.p本身 s.p[0] = 2; //s.p指向的是0x00000001,嘗試向這里寫,出錯(cuò) s.p[0] = 2; 時(shí)出錯(cuò) 因?yàn)閟.p存的是s.i的地址,s.p[1]為s.p,當(dāng)s.p[1]=1時(shí),s.p此時(shí)存放的是1了,而不是地址s.i,故在s.p[0] = 2時(shí)出錯(cuò). 此時(shí)相當(dāng)于s.p=ox00000001;地址ox0000001 = 2;當(dāng)然就出錯(cuò)了 如果語句s.p[0] =2 先于s.p[1]=1則程序就不會(huì)出錯(cuò).此時(shí)語句相當(dāng)于s.i=2;s.p=1; 六、題目描述: 1. int swap(int *x,int *y) { if(x==NULL | | y==NULL) return -1; *x += *y; *y = *x- *y; *x -= *y; return 1; } 請(qǐng)改錯(cuò),溢出已經(jīng)考慮,不是錯(cuò)誤 2. void foo(int *x, int *y) { *x += *y; *x += *y; } void fun(int *x, int *y) { *x += 2 * (*y); } 問兩個(gè)函數(shù)是否等價(jià),能否互換 解答:第一題的函數(shù)是交換。但假如考慮x, y都是指向同一個(gè)變量,結(jié)果是這個(gè)變量的值為0. 第二題的兩個(gè)函數(shù)是有區(qū)別的,也考慮x,y是指向同一個(gè)變量.這樣第一個(gè)函數(shù)的結(jié)果是這個(gè)變量的4倍.但第二個(gè)函數(shù)的結(jié)果是變量的3倍.

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            久久只有这里有精品4| 久久久久久精品免费免费自慰| 国产成人无码精品久久久免费| 天天爽天天狠久久久综合麻豆| 久久久久成人精品无码| 国产激情久久久久影院小草| 久久99精品久久久久久噜噜 | 亚洲国产另类久久久精品小说| 欧美亚洲日本久久精品| 久久久WWW成人免费精品| 免费精品久久久久久中文字幕| 国产99久久久国产精品小说| 色综合久久中文字幕无码| 国产精品久久永久免费| 中文字幕精品久久| 亚洲精品白浆高清久久久久久| 久久久久99精品成人片三人毛片| 成人综合久久精品色婷婷| 奇米影视7777久久精品人人爽| 久久国产精品成人免费| 无码乱码观看精品久久| 国产精品99久久精品| 伊人久久一区二区三区无码| 久久久精品人妻一区二区三区蜜桃| 久久播电影网| 亚洲精品无码久久久影院相关影片| 99久久精品费精品国产 | 久久综合给合久久狠狠狠97色69| 99久久99久久久精品齐齐| 国产精品内射久久久久欢欢 | 久久97久久97精品免视看秋霞| 亚洲精品无码久久久久久| 国产成人综合久久综合| 伊人久久久AV老熟妇色| 久久久亚洲精品蜜桃臀| 99精品伊人久久久大香线蕉 | 91精品无码久久久久久五月天| 无遮挡粉嫩小泬久久久久久久| 久久精品夜色噜噜亚洲A∨| 97精品伊人久久大香线蕉app| 77777亚洲午夜久久多人|