一道華為程式設計題目,int a[nsize],其中隱藏著若干0,其餘非0整數,寫乙個函式int func(int* a, int nsize),使a把0移至後面,非0整數移至陣列前面並保持有序(按原來順序),返回值為原資料中第乙個元素為0的下標。(盡可能不使用輔助空間且考慮效率及異常問題,注釋規範且給出設計思路)
思路如下:
1.定義兩個變數z、nz,分別用來跟蹤陣列裡面的元素兩類元素的位置。
z跟蹤0的位置,nz跟蹤非零元素位置。用flag來記錄第一為0元素的位置。
2.程式首先用乙個for迴圈來尋找第一0元素的位置,並用flag記錄下來。
並且用此值將n、nz初始化。
3.然後用while死迴圈裡面巢狀兩個for迴圈,乙個用來查詢0元素位置,
乙個用來查詢非0元素位置。找到立即break,跳出for迴圈。
4.在while中、for外,進行0元素和非0元素位置交換。
5.最後判斷非零元素記錄變數nz是否到達陣列末尾,到達立即跳出返回,否則從3迴圈。
程式編譯測試環境為dev-c++4.9.9.2,原始碼如下:
#include #include int func(int *a, int nsize);
int main(int argc, char *argv)
; p = func(a,10);
for(i = 0; i < 10;i++)
printf("fzp:%d\n",p);
system("pause");
return 0;
}int func(int *a, int nsize)
for(i = 0; i < nsize; i++)
}while(1)
}for(; nz < nsize; nz++)
a[z] = a[nz];
a[nz] = 0;
if(nz == (nsize - 1)) //nz到達陣列尾,整理完畢,跳出
break;
z++;
nz++;
}return flag;
}
博主c語言退化,歡迎交流改進,謝謝!
一道筆試程式設計題
有乙個無向圖,寫乙個函式判斷圖中是否存在迴路。函式原型如下 int ring int array,int n,int k n為圖中的頂點數,k為圖中的邊數,array其實是乙個k行2列的二維陣列,其中的元素比如 0,1 表示頂點0和頂點1之間存在邊。圖中如果存在迴路,函式返回1,否則返回0。不知哪位...
一道網易面試程式設計題
一條長為n的路,需要用路燈點亮,其中 表示需要點亮的位置,x 表示無需點亮的位置,假設燈立在i處,則它可以點亮i 1,i,i 1三個位置,問至少需要多少燈才能點亮整條路。乍一看,肯定是動態規劃 上 敲了兩個小時的動態規劃 include include include include using n...
筆試程式設計題(一)
題目原型 乙隻青蛙一次可以跳上1級台階,也可以跳上2級 它也可以跳上n級。求該青蛙跳上乙個n級的台階總共有多少種跳法。題目變形 這是做筆試時遇到的描述,解決思路一樣。公司老闆準備發獎金,總共發n元,一次可以發1元,也可以發2元,或者一次性全部發完。求老闆總共有多少種發法。每個台階可以看作一塊木板,讓...