#cpp
Только простым выражениями, без векторов, а if. Я представляю это себе так, создать временный массив, перебрать первый и записать экземпляры в него. Например err[]={2,3,2,4,5}, что б вышло err[]={2,3,4,5}, убрать повторяющиеся цифры, искал что то в нете, нормально ниче не нашел.. даже странно, вроде не сложно. Де то я стопорнулся не могу найти что не так. Заранее спасибо.... у меня получилось что то вроде этого. Н тот явно чего то не хвататет. #include "stdafx.h" #include#include #include using namespace std; int main() { //setlocale(LC_ALL, ""); int n = 0; tryAgain: cout << " Wpisz liczbe budynkow od 0 do 25000\n" << " Wpisz liczbe calkowita " << endl; cin >> n; if (n < 0 || n>25000) { cout << "Nie wypelnione warunki!\n" << endl; goto tryAgain; } else { int m = n * 2; int *str = new int[m]; int count = n; cout << "Wpisz długosc i wysokosc budynku \n"; for (int i = 0; i < m; i++) { cin >> str[i]; } for (int i = 0; i < m; i++) { cout << str[i] << " "; } cout << "Koniec" << endl; for (int j = 1; j < m; j = j + 2) { for (int k = 3; k < m; k = k + 2) { if ((str[j] == str[k]) && (k != j)) { count--; } } } cout << "\nIliosc plakatow, potrzebujaca dla oklejania = " << count << endl; } _getch(); } Написать программу, которая: считывает из стандартного ввода, описания зданий, назначит минимальное количество плакатов, необходимых для полного покрытия их северных стен, выводит результат на стандартный вывод. Вход Первая строка входа содержит одно целое число (), обозначающий количество зданий, стоящих в ряд. Следующие строк содержат по два целых числа и (), отделяются одним интервалом и обозначающие длину и высоту -это здание в ряду. Выход Первая и единственная строка вывода должна содержать одно целое число, минимальное количество прямоугольных плакатов, которыми можно полностью покрыть северные стены зданий. Данные входа: 5 1 2 1 3 2 2 2 5 1 4 Правильный ответ: 4.Пример
Ответы
Ответ 1
int err[5]={2,3,2,4,5}; sort(begin(err),end(err)); cout << distance(begin(err),unique(begin(err),end(err))) << endl; Выводит количество (раз вы просите подсчитать не дублирующиеся элементы) различных элементов в массиве. Вектора не используются :)Ответ 2
Ок, самый простой способ - нужно просто для каждого элемента проверять, был ли такой элемент раньше. Где то так int a[5] = {1,2,3,4,4}; cout << a[0]; // первый элемент выводим. До него явно дубликатов нет for (int i = 1; i < 5; i++) { // начинаем с следующего bool f = false; // флаг "найденности" for (int j = 0; j < i; j++) { if (a[i] == a[j]) {f = true; break;} // нашли, отметим. } if (!f) cout << a[i]; // если нет дубликата - выведем } Добавить элемент в результирующий массив - это уже самостоятельно. Если "можно использоваться" std::set, тогда задача решается проще. А в вообще есть std::unique который решает задачу (главное, что бы массив был отсортирован).Ответ 3
Вот пример: Сортирует любой массив любого размера. размер указывается в size. Так же выводит количество удалённых символов, количество уникальных символов,и общее количество символов // Helper.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #includeusing namespace std; int main() { const int size = 15000; int newsize = size; int arr[size]; bool duplicated[size] = { false }; // Инициализация массива рандомными числами for (int i = 0; i < size; i++){ arr[i] = rand() % 700; } // Проверка массива на дублирующиеся числа. for (int i = 0; i < size; i++) { if (!duplicated[i]) { for (int s = i + 1; s < size; s++) { if (arr[i] == arr[s]) { duplicated[s] = true; newsize--; } } } } //Создание нового отсортированного от дублированных чисел массива int newarray[size] = { 0 }; int offs = 0; for (int i = 0; i < size; i++){ if (!duplicated[i]) { newarray[i - offs] = arr[i]; } else if (duplicated[i]) { offs++; } } //Выводим старый массив. int o = 0; // Когда это число будет = 30 будем делать отступ cout << "Old array: " << endl; for (int f = 0; f < size; f++) { cout << arr[f] << ' '; if (o == 30) { cout << endl; o = 0; } } //Выводим новый массив. o = 0; cout << endl << "New array: " << endl; for (int i = 0; i < newsize; i++) { cout << newarray[i] << ' '; if (o == 30) { cout << endl; o = 0; } } cout << endl << "NewSize: " << newsize << endl; // Новое количество символов cout << "OldSize: " << size << endl; // Старое количество символов cout << "Numbers deleted: " << size - newsize << endl; // Сколько Удалено символов cin.get(); // Тормозим консоль потому что тормозить консоль круче чем запуск без отладки. return 0; } Ответ 4
size_t amt(int m[], const size_t sz) { std::sort(m, m + sz); return std::unique(m, m + sz) - m; }Ответ 5
void element_check(int *arr, int const size, int const element, bool&test) { for (int i = 0; i <= size; i++) { if (element == arr[i]) { test = true; break; } } } вот так проверяем элемент на оригинальность... я так решил эту задачку...Ответ 6
А я бы делал через динамический массив import java.util.ArrayList; public class Main { public static void main(String[] args) { ////////// создаем исходный массив А с рандом числами от 1 до 5 и паралельно будет вписывать его значения в динамический массив DYN int [] a = new int [10]; ArrayListdyn = new ArrayList(); for (int i=0; i<10; i++){ a[i]= (int) (1 + (Math.random()*6-1)); dyn.add(a[i]); System.out.print(a[i]+" "); } System.out.println("\n............"); //////////// берем из дин.массива 1ый элемент и сравниваем его с 2...10. потом берем 2ой и сравниваем его с 3...10 и тд. /////////// если элементы совпдаают - удаляем элемент из массива и возвращаемся в начало процесса for (int i=0; i<(dyn.size()-1); i++){ for (int j=i+1; j
Комментариев нет:
Отправить комментарий