题意:给定数组长度n和操作次数k,下一行给出n个数,然后每次操作找出数组中除了零外的最小数字输出,输出后把数组中非零的数字都减去该最小值。重复k次操作,如果全是0则输出0。
题解:先排序,从第一个不是零的数开始输出,同时用temp记录后一个数要减去的数,最后如果不足k次用0来补。
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
int n,k;
int a[100100];
cin>>n>>k;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
int temp=0;
int cnt=0;
for(int i=0;i<n&&cnt<k;i++)
{
if(a[i]-temp!=0)
{
cout<<a[i]-temp<<endl;
temp+=(a[i]-temp);
cnt++;
}
}
for(;cnt<k;cnt++)
cout<<'0'<<endl;
return 0;
}