2015-07-14 2 views
0

Я пытался решить проблему, в которой я должен сортировать все больше массива чисел, чем брать первые k чисел из отсортированного массива и исключать числа, которые повторяются и записывать их на выходе.Задача сортировки вставки

Это мой код:

#include <iostream> 

using namespace std; 

int main() 
{ 
int n, k; 
cin >> n >> k; 
int tab[n]; 
for (int i = 0; i < n; i++) //taking n numbers from input 
{ 
    cin >> tab[i];    
} 

int j, element; 
for (int i = 1; i < n; i++) //i am using insertion sort 
{ 
    j = 0; 
    while (tab[j] < tab[i]) 
      j++; 
    element = tab[i]; 
    for(int k = i - 1; k >= j; k--) 
      tab[k + 1] = tab[k]; 
    tab[j] = element; 
} 

for (int i = 0; i < k; i++) //writing k smallest numbers without repetitions 
{ 
    if (tab[i] == tab[i + 1]) 
     continue; 
    cout << tab[i] <<"\n";  
} 
cin >> n; 
return 0; 
} 

обычно это работает, и это дает ожидаемый выход, однако, когда я отправляю эту проблему, чтобы проверить его правильность (я нашел эту проблему на польском сайте), он говорит, что «неправильно anwser». Я не вижу здесь никаких ошибок, может быть, вы увидите что-то, что я написал плохо.

ответ

0

Я думаю, вы неправильно поняли проблему. «устранить те числа, которые повторяются» означает, что вам нужно напечатать номер один раз и устранить последующие случаи (случаи) этого числа. Напр.

n = 5; 
k = 3; 
tab[n] = 5 1 1 1 1 

Здесь сортируется вкладка [] становится '1 1 1 1 5', то ожидается выход '1', но ваша программа ничего не дает!

Надеюсь, это поможет :)

+0

да, спасибо, это было – essa

Смежные вопросы