亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
樓主: forrestgang
打印 上一主題 下一主題

華為面試題(8分鐘寫出代碼) [復(fù)制鏈接]

論壇徽章:
0
31 [報(bào)告]
發(fā)表于 2006-11-14 00:28 |只看該作者
原帖由 s5unty 于 2006-11-13 22:43 發(fā)表


不行阿,我理解后用c實(shí)現(xiàn),結(jié)果不正確,可能是我理解有問題?


  1. #include <iostream>

  2. using namespace std;

  3. void change(int* a, int* b) {
  4.     int t = *b;
  5.     *a = t;
  6.     *b = * ...
復(fù)制代碼


完整的程序是這樣的,可以參考一下

  1. #include <stdio.h>
  2. #include <math.h>

  3. #define N 10

  4. void ary_init(int a[], int b[]){ //初始化數(shù)組
  5.     int i;
  6.     for (i=0; i<N; i++){
  7.         a[i] = rand()%100;
  8.     }
  9.     for (i=0; i<N; i++){
  10.         b[i] = rand()%100;
  11.     }
  12.     return;
  13. }
  14. long sum(int a[]){ //數(shù)組求和
  15.     int i;
  16.     int s;
  17.     for (s=0,i=0; i<N; i++){
  18.         s += a[i];
  19.     }
  20.     return s;
  21. }

  22. void change(int *a, int *b){ //數(shù)組元素交換
  23.     int tmp;
  24.     tmp = *a;
  25.     *a = *b;
  26.     *b = tmp;
  27.     return;
  28. }

  29. void prt_ary(int a[], int b[]){ //列印兩數(shù)組元素及各自元素和
  30.     int i;
  31.     for(i=0; i<N; i++){
  32.         printf("%5d   ", a[i]);
  33.     }
  34.     printf("\n");
  35.     for(i=0; i<N; i++){
  36.         printf("%5d   ", b[i]);
  37.     }
  38.     printf("\n");
  39.     printf("%d\n", sum(a));
  40.     printf("%d\n", sum(b));
  41. }

  42. int main(){
  43.     int i;
  44.     int j;
  45.     int a[N];
  46.     int b[N];
  47.     int a_sum;
  48.     int b_sum;
  49.     int tmp;
  50.     int ab_diff;

  51.     ary_init(a,b);//初始化
  52.     prt_ary(a, b);//列印當(dāng)前數(shù)組狀態(tài)
  53.     ab_diff = abs(sum(a)-sum(b));
  54.     for (i=0; i<N; i++){//交換數(shù)組元素
  55.         for (j=0; j<N; j++){
  56.             change(a+i, b+j);
  57.             if (abs(sum(a)-sum(b)) > ab_diff){
  58.                 change(b+j, a+i);
  59.             }
  60.             else{
  61.                 ab_diff = abs(sum(a)-sum(b));
  62.             }
  63.         }
  64.     }
  65.     prt_ary(a, b);//列印交換后數(shù)組狀態(tài)
  66.     getch();
  67. }
復(fù)制代碼

[ 本帖最后由 greensky_34 于 2006-11-14 00:30 編輯 ]

論壇徽章:
0
32 [報(bào)告]
發(fā)表于 2006-11-14 00:31 |只看該作者

12樓的錯(cuò)誤舉例:

比如說總共加起來為數(shù)組:1,2,3,4,5,6

如果算6-5,4-3,2-1(12樓的算法),然后求和結(jié)果最小差是3

但我可以這樣分組(1,6)一組,(2,5)一組,4,3分到兩個(gè)組,結(jié)果最小差才是1

論壇徽章:
0
33 [報(bào)告]
發(fā)表于 2006-11-14 08:53 |只看該作者

最笨的才是最好的

首先可以用窮舉的方式來實(shí)現(xiàn)該方法
在此基礎(chǔ)上再優(yōu)化算法(即排除沒有必要的計(jì)算),最后必然可以得到想要的結(jié)果

論壇徽章:
0
34 [報(bào)告]
發(fā)表于 2006-11-14 09:16 |只看該作者
原帖由 mill888 于 2006-11-13 17:29 發(fā)表
8分鐘就能寫出正確方法的人,建議就不要去華為了,應(yīng)當(dāng)去更好的公司。
招聘中,建議華為公司應(yīng)當(dāng)定好自己的位。

共鳴

論壇徽章:
0
35 [報(bào)告]
發(fā)表于 2006-11-14 09:25 |只看該作者
可以用背包算法

輪流取數(shù)、按差值取數(shù)都不能保證正確性

比如對于原始數(shù)組:
a[]={1,2,3}
b[]={4,10,20}

或者:
a[]={1,29,30}
b[]={50,90,100}

論壇徽章:
0
36 [報(bào)告]
發(fā)表于 2006-11-14 09:32 |只看該作者

我認(rèn)為不要寫程序,寫個(gè)算法就好啦,不知道我的對不對,

首先看圖片信息-------這個(gè)題不一定就能交叉,你們能確定交叉就對嗎,不對的,這也是我剛開始錯(cuò)誤的思路,哈哈
我很就沒寫程序了,我是個(gè)做網(wǎng)頁的,現(xiàn)在也不知道用哪種語言表達(dá)了,希望寫程序比較好的朋友,把程序?qū)懗鰜戆,就一個(gè)函數(shù),我認(rèn)為就能解決這個(gè)問題,

你們的程序中只要不區(qū)分當(dāng)N為奇數(shù)還是偶數(shù)的情況,你們的算法就是錯(cuò)誤的,我可以這么肯定的說,

你們只需要看N的判斷,就可以知道這個(gè)算法的正確還是錯(cuò)誤,

我個(gè)人認(rèn)為,寫程序,未必一定要用,英語來表達(dá),
這樣會(huì)達(dá)不到讓看的人明白的效果的,  

呵呵,一個(gè)沒編過程的人,不知道說的對不對,但是我看過LINUX 內(nèi)核和STL,自認(rèn)為比別人懂模式。



我確定這個(gè)絕對正確,我用了10分鐘


然后,將a,b數(shù)組合并,成一個(gè)數(shù)組C,

排序C,
然后將C中的數(shù)組

這個(gè)時(shí)候要看N為奇數(shù)還是偶數(shù)了 ,分析如圖

這樣就應(yīng)該可以了把,



例如;

C數(shù)組;123456
那么A,B將取如下圖

[ 本帖最后由 banboy 于 2006-11-14 10:10 編輯 ]

suanfa.gif (30.54 KB, 下載次數(shù): 186)

suanfa.gif

suanfa111111.gif (21.98 KB, 下載次數(shù): 165)

suanfa111111.gif

論壇徽章:
0
37 [報(bào)告]
發(fā)表于 2006-11-14 09:35 |只看該作者
這樣一定不行

論壇徽章:
0
38 [報(bào)告]
發(fā)表于 2006-11-14 09:37 |只看該作者
小弟想到一個(gè)算法,,大家給點(diǎn)意見
   定義一個(gè)c[2N]數(shù)組,將A數(shù)組和B數(shù)組里面的元素都放到C數(shù)組中,然后對C數(shù)組小到大排序,排好后在取數(shù),在定義一個(gè)的D[N]數(shù)組,將C的第一個(gè)加上C的第2N個(gè)放到D[0]中,C的第二個(gè)加上C的第2N-1個(gè)放到D[1]中。。。。放好后,再將D數(shù)組從小到大排序,在又按照上面的方法,第一個(gè)加上最后一個(gè)放到另一個(gè)數(shù)組的第一個(gè)中,第2個(gè)加到數(shù)第二個(gè)放到另一個(gè)數(shù)組的第2個(gè)中。。。以這中思路一直排下去,最后得到一個(gè)兩個(gè)元素的數(shù)組,那這數(shù)組中的兩個(gè)元素的差應(yīng)該就是最小的了。。。
這個(gè)數(shù)組中的兩個(gè)元素中的每一個(gè)都是由N個(gè)數(shù)加起來的,所以在一開始放數(shù)的時(shí)候要對這些數(shù)進(jìn)行記錄。。。得到后便可以將這2N個(gè)數(shù)分配給A數(shù)組和B數(shù)組了.....
     這種方法應(yīng)該是可行的。。。。高手指點(diǎn)下....

論壇徽章:
0
39 [報(bào)告]
發(fā)表于 2006-11-14 09:37 |只看該作者
greensky 的算法很不錯(cuò)啊~~~大家看看可否再優(yōu)化?

論壇徽章:
0
40 [報(bào)告]
發(fā)表于 2006-11-14 09:38 |只看該作者
QUOTE:
原帖由 zhhui2000 于 2006-11-13 07:54 發(fā)表
先各自排序,再交叉存放較大無素
這個(gè)基本可行,但不是交叉存放較大元素,而是哪邊的和小就一直放大元素,直到n,然后把剩下的扔到另一組中就ok了。


同意,但不應(yīng)該是哪邊小就一直放大元素,直到n, 應(yīng)該是直到這個(gè)組元素的和大于另一組元素和時(shí),再將下一元素放到令一組,若兩組之和相等時(shí),將下一元素放到元素最多的那個(gè)組,然后以同樣的方法繼續(xù)剩下元素的放置,直到有一個(gè)組為n,然后把剩下的放到另一個(gè)組。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP