腾讯笔试编程题

20190408 腾讯笔试编程题

一天,小Q得到了一个包含n个数字的数组,他想对这个数组进行k次如下的操作:
首先找出数组中最小的非0数字x,输出它,然后把数组中的所有非零数字都减去x;如果数组中的数字都是0,那么直接输出0.

输入描述
第一行两个数字n和k,用一个空格分隔;
第二行n个数字,每两个数字之间用一个空格分隔。
输出描述
k行,每行一个整数

示例:
输入
5
5 -4 1 -3 1
输出
9

#include <math.h>
#include <iostream>
using namespace std;

int main()
{
	int n, k;
	cin >> n >> k;
	//if (n<1 || k>pow(10, 5))
		//return false;
	int *numbers = new int[n];
	int temp = 0;
	for (int i = 0; i < n; ++i)
	{
		cin >> numbers[i];
		//if (numbers[i]<1 || numbers[i]>pow(10, 9))
			//return false;
		if(numbers[i]==0)
			++temp;		
	}
	if (temp == n)
		return 0;
	int *num = numbers;
	for (int i = 0; i < k; ++i)
	{
		int min = pow(2,31)-1;  // 没有将最小值设为0,是因为如果第一项是0,则就无法找出数组中最小的非0数字x
		for (int j = 0; j < n; ++j)
		{
			if (num[j] < min && num[j] != 0)
				min = num[j];
		}
		cout << min << endl;
		for (int j = 0; j < n; ++j)
			if(num[j]>0)
				num[j] = num[j] - min;
	}
	system("pause");
}

小白一枚,请各位大佬手下留情~

你可能感兴趣的:(实习笔试)