華爲oj: 輸入n個整數,輸出其中最小的k個

輸入n個整數,輸出其中最小的k個。

詳細描述:

接口說明

原型:

bool GetMinK(unsignedint uiInputNum, int * pInputArray, unsignedint uiK, int * pOutputArray);

輸入參數:

     unsignedint uiInputNum //輸入整數個數

int * pInputArray  //輸入整數數組

unsignedint uiK   //需輸出uiK個整數

輸出參數(指針指向的內存區域保證有效):

    int * pOutputArray //最小的uiK個整數

返回值:

        false 異常失敗

          true  輸出成功

 

 

知識點 循環,數組
運行時間限制 10M
內存限制 128
輸入

輸入說明 
1 輸入兩個整數 
2 輸入一個整數數組

輸出

輸出一個整數數組

樣例輸入 5 2 1 3 5 7 2
樣例輸出 1 2
這題一直提交錯誤的原始是,輸出格式的問題,最後輸出的數字間必須要有空格,而最後一個數字前面不能有空格。

下面提供了兩種方法:

方法一:用數字,指針的方式,需要自己寫排序函數,本題採用希爾排序。

方法二:利用vector可以動態創建,利用algorithm頭文件裏面的sort函數排序

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

void shellsort(int arr[],int N)
{
	int i,j,d;
	int temp;
	for(d=N/2;d>=1;d/=2)
	{
		for(i=d;i<N;i++)
		{
			temp=arr[i];
			for(j=i-d;j>=0&&temp<arr[j];j-=d)
				arr[j+d]=arr[j];
			arr[j+d]=temp;
		}
	}
}

bool GetMinK0(unsigned int Num, int * pInputArray, unsigned int K, int * pOutputArray)
{
    int i;
	if (K>Num||K==0||Num==0) return false;
	shellsort(pInputArray,Num);
	for(i=0;i<K;i++)
	{
		pOutputArray[i]=pInputArray[i];
	}
	return true;
 }

vector<int> GetMinK1(vector<int> in,int Num,vector<int> out,int K)
{
	int i;
	sort(in.begin(),in.end());
	for(i=0;i<K;i++)
       out[i]=in[i];
	return out;
}
 int main()
 {
	 unsigned int k;
	 unsigned int len;
	 int i;
	 cin>>len>>k;

	 int *in =new int[len];
	 int *out=new int[k];
	 for(i=0;i<len;i++)
		 cin>>in[i];
	 GetMinK0(len,in,k,out);
	  for(i=0;i<k-1;i++)
		 cout<<out[i]<<' ';
	  cout<<out[k-1];
	  delete[] in;
	  delete[] out;

	 vector<int> in1(len);
	 vector<int> out1(k);
	 for(i=0;i<len;i++)
		 cin>>in1[i];
	 out1= GetMinK1(in1,len,out1,k);
	 for(i=0;i<k-1;i++)
		 cout<<out[i]<<' ';
	  cout<<out[k-1];
 }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章