Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > помогите срочно!!!!!


Автор: EnShTe1N 12.12.2007, 18:18
Кароче такая задача:
K) Дан массив, отсортированный по возрастанию (каждый элемент массива не меньше предыдущего элемента, например, {1, 2, 2, 3, 3, 3}). Найдите количество различных чисел в этом массиве. 

помогите умоляю, выложите код

Автор: Andrey44 12.12.2007, 18:24
Код

int count = 0;
for (int i = 0; i < sizeArray-1; ++i){
      if(arr[i]!=arr[i+1];
          count++;
}



Вроде-бы так.

Автор: EnShTe1N 12.12.2007, 18:26
Andrey44, а можно поподробнее! где задавать сайз и тд? выложи полный код(включая иострим, маин)

Добавлено через 3 минуты и 32 секунды
и кстати я посмарел твое решение - оно не верно!

Добавлено через 4 минуты и 16 секунд
в том смысле что ты находиш различны ли соседние элементы, а надо найти скока в массиве всег оразличных элементов

Автор: Andrey44 12.12.2007, 18:34
Код

#include<vector>
using namespace std;
int main()
{
vector<int> vec;
vec.resize(100);
for(int i = 0; i < vec.size(); i++)
vec[i] = rand()%70;

int count = 0;
for (int i = 0; i < vec.size()-1; i++){
      if(vec[i]!=vec[i+1])
          count++;
}
}


Не проверял. Попробуй

Добавлено @ 18:37
Все должно работать.
Проверь этот код.
В count будет количество разных элементов

Добавлено @ 18:37
После if убери ;

Автор: EnShTe1N 12.12.2007, 18:41
чет не работает! пишет просто нажмите любую кл для продолжения!

Добавлено через 38 секунд
и кстати где задавать размер массива?

Добавлено через 2 минуты и 39 секунд
но самое интересное: где вводить сам массив???

Автор: Andrey44 12.12.2007, 18:44
Так напиши внутри последнего цикла
Код

cout>>vec[i]>>' ';

//и после цикла 
cout>>count;

Автор: EnShTe1N 12.12.2007, 18:48
не а вводить его самому то можно???

Автор: Andrey44 12.12.2007, 18:51
Вводить что?
Вручную заполнять массив?

Автор: EnShTe1N 12.12.2007, 18:51
да! код пожалуйсто! smile 

Автор: Andrey44 12.12.2007, 18:54
Я конечно понимаю, ты парень наверное хороший, но
иногда и самому надо подумать.
Код


int digit;
for(int i = 0; i < vec.size(); i++){
cin<<digit;
vec[i] = digit;//это вместо rand()
}


Автор: EnShTe1N 12.12.2007, 18:56
слушай я вот до твоего поста сделал ввод самого массива тоесть cin >> vec[i];
вроде работает прально!!!!

Автор: bsa 12.12.2007, 18:58
Цитата(EnShTe1N @ 12.12.2007,  18:56)
слушай я вот до твоего поста сделал ввод самого массива тоесть cin >> vec[i];
вроде работает прально!!!!

да. правильно.

Автор: Andrey44 12.12.2007, 19:01
Ну конечно можно и так. Это я просто для наглядности.
Чтоб понятно было smile 

Автор: bsa 12.12.2007, 20:17
Цитата(Andrey44 @ 12.12.2007,  19:01)
Ну конечно можно и так. Это я просто для наглядности.
Чтоб понятно было smile

cin << digit - наглядный пример, как делать не стоит  smile 

Автор: Wowa 12.12.2007, 20:18
Модератор: Название темы должно отражать ее суть!
 Правила форума: http://forum.vingrad.ru/index.php?act=boardrules

Автор: Warchief 12.12.2007, 21:09
извините, что вмешиваюсь, но разве эта часть кода делает, то что написано в задании?  
Код

int count = 0;
for (int i = 0; i < vec.size()-1; i++){
      if(vec[i]!=vec[i+1])
          count++;


Ведь если если массив будет {1,2,3,4,1,4}, то в переменной count будет присвоено значение 5, или я ошибаюсь?  smile  

Автор: EnShTe1N 12.12.2007, 21:47
Да действительно, программа делает не то!!!
Но я все таки придумал правильный код, так что =Ъ

Автор: Damarus 12.12.2007, 22:01
Цитата(Warchief @  12.12.2007,  21:09 Найти цитируемый пост)
Ведь если если массив будет {1,2,3,4,1,4}, то в переменной count будет присвоено значение 5, или я ошибаюсь?  smile 

Если массив будет {1,2,3,4,1,4}, то он не
Цитата(EnShTe1N @  12.12.2007,  18:18 Найти цитируемый пост)
отсортированный по возрастанию (каждый элемент массива не меньше предыдущего элемента, например, {1, 2, 2, 3, 3, 3})


Автор: baldina 12.12.2007, 22:12
cout>>count;
cin<<digit;

Andrey44, вы лево и право не путаете?  smile

Автор: gamedeveloper 12.12.2007, 22:39
Код

const int arrSize=5;
const int range=3; //максимальное количество разных чисел в массиве

int arr[arrSize]={1, 1, 2, 3, 3};
int numArr[range]={0,}; //массив в котором храним количества одинаковых элементов
                                        //заполнять именно так: {0,}  - массив будет заполнен нулями.
int i, count;

for (i=0; i<arrSize; i++) {
    cin>>arr[i];
}

for (i=0; i<arrSize; i++) {
    if (!numArr[arr[i]]) { //проверяем, количество встречь этого элемента,
                                    //если оно равно 0 то счётчик увеличиваем
        count++;
        numArr[arr[i]]++;  //увеличиваем счётчик встречь элемента
    }
}

cout<<count;


Вроде так.


Andrey44, путаешь операторы вставки/взятия в/из потока с самими потоками.

Автор: Andrey44 13.12.2007, 09:14
Точно спутал. Извиняюсь, давно не работал с потоками ввода-вывода smile 
А под рукой не было как проверить. Еще раз извиняюсь если ввел кого-то в заблуждение.

Добавлено через 4 минуты и 26 секунд
Warchief
Цитата

извините, что вмешиваюсь, но разве эта часть кода делает, то что написано в задании?  
Выделить всёкод C++
1:
2:
3:
4:
    
int count = 0;
for (int i = 0; i < vec.size()-1; i++){
      if(vec[i]!=vec[i+1])
          count++;


Ведь если если массив будет {1,2,3,4,1,4}, то в переменной count будет присвоено значение 5, или я ошибаюсь?  smile   


А разве в задании не было сказано , что массив отсортирован по-возрастанию.
Если-бы было по-другому написано, то и код был-бы другой.

Автор: zkv 13.12.2007, 09:19
Цитата(Andrey44 @  13.12.2007,  09:14 Найти цитируемый пост)
давно не работал с потоками ввода-вывода

я тоже постоянно забываю в какую сторону их рисовать, помогает простое правило:
при input потоке (e.g. cin) направление из потока в переменную 
при output обратно.

Автор: Andrey44 13.12.2007, 09:25
zkv,  smile вы как всегда даете хорошие советы. 
Спасибо, постараюсь запомнить!

Автор: Warchief 13.12.2007, 17:44
Цитата
А разве в задании не было сказано , что массив отсортирован по-возрастанию.
Если-бы было по-другому написано, то и код был-бы другой.



Извините, не правильно  прочитал задание smile  smile 

Автор: FK2703 16.12.2007, 13:53
очень прошу помощи с задачей "Золотая гора" ("Треугольник") на C

Входной файл input.txt
Выходной: output.txt

Идея-подсказка, предложенная мне: "Реализация проста-делай двумерный массив и пускай цикл снизу. Последняя строка совпадает с исходной, а дальше подымайся вверх и выбирай максимум из двух. a[0][0] твой ответ"

Пример правильного input.txt:
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5


Первое число во входном файле (5) - количество строк в треугольнике. Соответственно, остальные - его заполнение. Надо найти сумму чисел, расположенных на пути, начинающемся в верхней точке треугольника и заканчивающимся на основании.
Условия:
1. Каждый шаг на пути может осуществляться вниз по диагонали влево или вниз по диагонали вправо.
2. Число строк в треугольнике - от 1 до 100
3. Треугольник составлен из простых чисел от 0 до 99

Выходные данные.
В файл output.txt записывается только наибольшая сумма в виде целого числа. Для треугольника из примера правильно работающая прога запишет: "30"

Если не сдам в понедельник - не допустят до сессии, хотя это - последний оставшийся зачёт(

Автор: kolyan 16.12.2007, 16:46
Очень нужна помощь. необходимо решить задачу в C++! Вот условие: Ввести последовательность из 25 нечётных чисел с клавиатуры. Найти наибольшее число из введенных элементов. Решение желательно приводить через printf, C++ Мы только начали изучать, я ничего не понял, прокоментируйте если можно. Заранее спасибо!

Автор: baldina 16.12.2007, 17:34
kolyan,
Цитата

Ввести последовательность из 25 нечётных чисел с клавиатуры


вводишь при помощи 
Код

int n;
scanf ("ld", &n);

далее проверяешь, является ли оно нечетным (нечетное даёт в остатке от деления на 2 единицу, операция получения остатка - %). Если четное - выводишь предупреждение и повторяешь ввод. И так 25 раз.
Код

for (int i=0; i < 25; ++i)
{
  // здесь ввод, проверка и проч.
}

Наибольшее число можно искать по ходу, не запоминая все числа: заводишь переменную для значения максимального числа, например m.
m надо присвоить начальное значение, заведомо меньшее любого введенного. Например, полагая, что для ввода разрешены только положительные числа, можно смело дать начальное значение = 0.
На каждом шаге цикла сравниваешь введенное число с m, и если введенное больше m, запоминаешь его как новое значение m.
Код

if (n > m) m = n;

в конце выводишь на печать m
Код

printf ("Max number is %ld\n", m);


Думаю этого вполне достаточно, что б остальное ты сам написал.

Автор: kolyan 16.12.2007, 17:56
baldina, спасибо большое, что откликнулся! Есть еще вопрос... Какие нужно библиотеки запускать, прогу я прописал, но выдает какую-то ошибку! А что нужно для \ввод, проверки и проч.\, извени за тупые вопросы!!!!!!!

Автор: baldina 16.12.2007, 18:35
Какую именно ошибку? Никаких особенных библиотек не надо, все есть в самом С++. Ты приложение консольное создал?

для ввода используется функция scanf
для вывода используется функция printf
для проверки используется оператор if

все это есть в моём посте

Автор: baldina 16.12.2007, 18:42
Ну тогда тебе в http://forum.vingrad.ru/forum/Vingrad-help-center.html

Автор: zkv 16.12.2007, 19:02
kolyan, тебе в Центр помощи. Ссылку дали. Создай свою тему. Но сначала познакомься с правилами форума.

Автор: archimed7592 16.12.2007, 20:12
Спасибо за тему - поржал от души smile.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)