上海華為的一道關於指標方面的程式設計題
int a[nsize],其中隱藏著若干0,其餘非0整數,寫乙個函式int func(int* a, int nsize),使a把0移至後面,非0整數移至陣列前面並保持有序,返回值為原資料中第乙個元素為0的下標。(盡可能不使用輔助空間且考慮效率及異常問題,注釋規範且給出設計思路)
思路:首先能想到的就是進行排序,但前面已經有說明全是整數(可能包含負數),整數中包含若干0,可行的方法就是先逆序排序(取出0,0不參與排序)。所以整個思路就是進行排序,排序過程中遇到0,則記錄(記錄個數和序號)
#include #include #include #include int func(int *a,int nsize)
else }
//順序排序,notzerocount 個整數參與排序
for(j = 0; j < notzerocount - 1; j++)
} }
memset(a, 0, nsize * sizeof(int));
memcpy(a, tmparray, notzerocount * sizeof(int));
free(tmparray);
return fristzeroidx;
}int main(int argc,char* ar**)
idx = func(array, len);
printf("\nidx = %d, array data changed:\n",idx);
for(i = 0; i < len; i++)
printf("\n");
free(array);
return 0;
}
測試結果如下:
每天一道面試題(1)
2011年 阿里巴巴 筆試題集 第23題 乙個骰子,6面,1個面是 1,2個面是2,3個面是3,問平均擲多少次能使1 2 3都至少出現一次.這題可以翻譯為,乙個骰子,6面,1個面是 1,2個面是2,3個面是3,隨機扔骰子,在第x次時3個數都出現,求這個x的期望 也就是扔無數次,x的平均值是多少 思路...
每天一道面試題 開篇
先說一下自己寫 每天一道面試題 原因。雖然現在所在的公司對我還是比較重視,但是現在公司的現狀是取消了加班費,加班沒有調休 不論工作日還是週末還是法定節假日 本著能者多勞以及 培養新人 的觀念,我是專案組裡面加班最多的人之一,幾乎每天加班到十一二點,週六才能夠在晚上7點前下班。這種狀態持續了四五個月。...
一道筆試題
看到一道筆試題,跟自己想的有點出入,就跑了下,看了看原因。我稍微改了下 include int main int argc,char argv 輸出結果 c 5 d 245 press any key to continue vc6.0 debug下的彙編 5 unsigned char a 0xa...