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

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

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
樓主: forrestgang
打印 上一主題 下一主題

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

論壇徽章:
0
391 [報(bào)告]
發(fā)表于 2013-06-20 11:35 |只看該作者
這出題目的人是垃圾, 就因?yàn)闂l件和問(wèn)題交待的不清楚, 便可斷定.

論壇徽章:
0
392 [報(bào)告]
發(fā)表于 2013-06-23 19:07 |只看該作者
基本可以這樣:
先算出a元素的和與數(shù)組b元素的和之間的差,設(shè)為sumX
再進(jìn)行一一交換使,并求出新的差,設(shè)為tota
若abs(sumX)>abs(tota),使sumX=tota
否則換回來(lái)……
最后輸出最終的sumX
函數(shù)代碼如下:
/*需要math.h、iostream.h*/
void change(int *a,int *b,int n)
{
        int tota,tmp;
        int sumX=sum(b,n)-sum(a,n);//sum()用于計(jì)算數(shù)組之和,參數(shù)為數(shù)組名和大小
        for(int j=0;j<n;j++)
        {
                for(int i=0;i<n;i++)
                {
                        tmp=a[i];
                        a[i]=b[j];
                        b[j]=tmp;
                        tota=sum(b,n)-sum(a,n);
                        if(abs(tota)<abs(sumX))
                        {
                                sumX=tota;
                        }
                        else
                        {
                        tmp=a[i];
                        a[i]=b[j];
                        b[j]=tmp;
                       
                        }
                }
        }
        putout(a,n);//putout()用于打印數(shù)組,參數(shù)為數(shù)組名和大小
        putout(b,n);
        cout<<sumX <<endl;
}

論壇徽章:
0
393 [報(bào)告]
發(fā)表于 2013-06-23 22:37 |只看該作者
我認(rèn)為不應(yīng)該從小的先取,應(yīng)該先處理兩個(gè)最大的,因?yàn)閮蓚(gè)最大的不可能在一個(gè)數(shù)組中,但兩個(gè)最小的可能在同一個(gè)數(shù)組中。回復(fù) 45# ccjjhua


   

論壇徽章:
0
394 [報(bào)告]
發(fā)表于 2013-06-23 22:45 |只看該作者
同意你的看法,考慮負(fù)數(shù),排序的方法都行不通,效率方面還可以優(yōu)化。回復(fù) 390# 被你發(fā)現(xiàn)了


   

論壇徽章:
0
395 [報(bào)告]
發(fā)表于 2013-06-25 14:31 |只看該作者
回復(fù) 1# forrestgang


#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int sort(int *x, int num)
{
    int i, j, tmp;
    for(i = 0; i < num; i++)
    {
        for(j = i; j < num; j++)
        {
            if(x < x[j])
            {
                tmp = x;
                x = x[j];
                x[j] = tmp;
            }
        }
    }
    return 0;
}
int main(void)
{
    int c[10];
    int j;
    int sum_a = 0;
    int sum_b = 0;
    int a[5] = {23,4,6,58,45};
    int b[5] = {51,12,3,43,46};
    // 結(jié)合兩個(gè)數(shù)組  
    for (j = 0; j < 5; j++)
    {
        c[ 0 * 5 + j ] = a[j];
        c[ 1 * 5 + j ] = b[j];
    }
    // 從大到小排列
    sort(c,10);
    // 交叉取數(shù)
    for(j = 0; j < 5; j++)
    {
        if(sum_a >= sum_b)
        {
            a[j] = c[j*2 + 1];
            b[j] = c[j*2];
            sum_a += c[j*2 + 1];
            sum_b += c[j*2];
        }else{
            b[j] = c[j*2 + 1];
            a[j] = c[j*2];
            sum_b += c[j*2 + 1];
            sum_a += c[j*2];
        }
    }
    for(j = 0; j < 5; j++)
    {
        printf(" %d ", a[j]);
    }
    printf("\n");
    for(j = 0; j < 5; j++)
    {
        printf(" %d ", b[j]);
    }
    printf("\n");
    printf("sum_a = %d\n", sum_a);
    printf("sum_b = %d\n", sum_b);
    return 0;
}

論壇徽章:
0
396 [報(bào)告]
發(fā)表于 2013-06-27 17:15 |只看該作者
13樓正解
                             

論壇徽章:
0
397 [報(bào)告]
發(fā)表于 2013-06-29 13:29 |只看該作者
目測(cè)要用到動(dòng)態(tài)規(guī)劃分析最優(yōu)子結(jié)構(gòu)

論壇徽章:
0
398 [報(bào)告]
發(fā)表于 2013-07-07 17:09 |只看該作者
#define EXCHANGED    1
#define UNEXCHANGE  0

/* 交換兩個(gè)數(shù)組的元素,如果交換后能使兩數(shù)組各自的和之間差變小,則交換,否則不交換 */
int ExchangeEle( int* array1, int index1, int* array2, int index2, int size )
{   
    int sum1 = 0, sum2 = 0;
    int distance1 = 0, distance2 = 0;
    int iTemp = 0;
    int i = 0;
   
    for( i = 0; i < size; i ++ )
    {
        if( i != index1 )
            sum1 += *( array1 + i );
        if( i != index2 )
            sum2 += *( array2 + i );
    }
    distance1 = abs( ( sum1 + array1[index1] ) - ( sum2 + array2[index2] ) );
    distance2 = abs( ( sum1 + array2[index2] ) - ( sum2 + array1[index1] ) );
   
    if( distance2 < distance1 )
    {
        iTemp = *( array1 + index1 );
        *( array1 + index1 ) = *( array2 + index2 );
        *(array2 + index2 ) = iTemp;
        return EXCHANGED;
    }
    return UNEXCHANGE;
};

void Func( int* array1, int* array2, int size )
{
    int i = 0, j = 0;
    int iFlag = 0;
    for( i = 0; i < size; i ++ )
    {
        iFlag = 0;
        for( j = 0; j < size; j ++ )
        {
            if( ExchangeEle(array1, i, array2, j, size ) == EXCHANGED )
            {
                iFlag = 1;
            }
        }
        if( iFlag == 1 )
            break;
    }
    /* 兩個(gè)數(shù)組有交換過(guò)元素,已經(jīng)是兩個(gè)新數(shù)組了,繼續(xù)處理新數(shù)組 */
    if( iFlag == 1 )
    {
        Func( array1, array2, size );
    }
};

論壇徽章:
0
399 [報(bào)告]
發(fā)表于 2013-07-12 10:27 |只看該作者
本帖最后由 801901987 于 2013-07-13 09:56 編輯

交叉互換相加比較~

  1. #include <iostream>

  2. int main(void)
  3. {
  4.     int a[8] = {0, 0, 0, 0, 1, 100, 0, 0};
  5.     int b[8] = {0, 0, 2, 4, 6, 8, 0, 0};
  6.     int i,j=0,k=0,l,temp,m;   
  7.     for(i=0;i<8;i++)
  8.     j+=a[i]-b[i];
  9.     if(j<0)
  10.     j-=j*2;
  11.     for(i=0;i<8;i++)
  12.     {
  13.          for(l=0;l<8;l++)
  14.     {
  15.              temp=b[l];
  16.              b[l]=a[i];
  17.              a[i]=temp;      
  18.                for(m=0;m<8;m++)
  19.                    k+=a[m]-b[m];     
  20.                     if(k<0)
  21.                     k-=k*2;
  22.                     if(k>=j)
  23.                     {
  24.                     a[i]=b[l];               
  25.                     b[l]=temp;      
  26.                      
  27.                            
  28.                     }
  29.                     else
  30.                     j=k;
  31.                     k=0;            
  32.                     }            
  33.                     
  34.                     
  35.                     
  36.                     }
  37.                     for(i=0;i<8;i++)
  38.                     printf("%-4d",a[i]);
  39.                      printf("\n");
  40.                     for(i=0;i<8;i++)
  41.                     printf("%-4d",b[i]);
  42.                     printf("\n");               
  43.     printf("%d\n",j);
  44.     system("pause");
  45.     return 0;
  46. }
復(fù)制代碼

論壇徽章:
0
400 [報(bào)告]
發(fā)表于 2013-07-12 11:12 |只看該作者
思路:
1.先算出a元素的與數(shù)組b元素的總和,然后求平均數(shù)avr。
2.分別算出a,b兩數(shù)組的總和與平均數(shù)avr的差值d。
3.分別將a,b數(shù)組中與d差值最小的元素找出,然后分別替換。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP