Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 1
Регистрация: 29.10.2017
Сообщений: 6
1

Найти номер самого старшего жителя мужского пола

16.01.2018, 13:36. Просмотров 2712. Ответов 5
Метки acmp, c (Все метки)

Вроде все правильно, но не проходит 3 тест(

Перепись
(Время: 1 сек. Память: 16 Мб Сложность: 15%)
В доме живет N жильцов. Однажды решили провести перепись всех жильцов данного дома и составили список, в котором указали возраст и пол каждого жильца. Требуется найти номер самого старшего жителя мужского пола.

Входные данные
Во входном файле INPUT.TXT в первой строке задано натуральное число N – количество жильцов (N ≤ 100). В последующих N строках располагается информация о всех жильцах: каждая строка содержит два целых числа: V и S – возраст и пол человека (1 ≤ V ≤ 100, S – 0 или 1). Мужскому полу соответствует значение S=1, а женскому – S=0.

Выходные данные
Выходной файл OUTPUT.TXT должен содержать номер самого старшего мужчины в списке. Если таких жильцов несколько, то следует вывести наименьший номер. Если жильцов мужского пола нет, то выведите -1.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
 
int main()
{
    int n;
    cin>>n;
    int arr[n], a[n];
    int max1 = arr[0];
    for (int i = 0; i < n; i++) {
        cin>>arr[i]>>a[i];
        if (arr[i] > max1 && a[i] != 0) {
            max1 = i;
        }
    }
    if (max1 - 1 > 0) {
        cout<<max1 - 1;
    } else {
        cout<<-1;
    }
    
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.01.2018, 13:36
Ответы с готовыми решениями:

Найти номер самого старшего жителя мужского пола
Есть вот такая задача: Перепись В доме живет N жильцов. Однажды решили провести перепись всех...

Структуры: определить самого молодого представителя мужского пола и его знак Зодиака
Задание: Описать структуру с именем ZNAK , содержащий следующие поля: фамилия , имя ; знак...

Массив структур: найти самого младшего и самого старшего школьника
Кароч , я хз как работать со структурами, помогите плиз, желательно со объяснением. Заранее...

Найти среди людей самого старшего и самого тяжелого
Здраствуйте. Есть такое задание: нужно с помощью классов создать 100 человек с параметрами вес и...

5
74 / 74 / 97
Регистрация: 21.12.2014
Сообщений: 185
16.01.2018, 17:11 2
C++
1
2
3
        if (arr[i] > max1 && a[i] != 0) {
            max1 = i;
        }
Ошибка в этом фрагменте. Изначально max1 равняется возрасту первого жильца в списке, потом если находим мужчину старше, то в max1 записывается его номер. В следующих итерациях цикла идет сравнение возраста с номером.
1
280 / 228 / 129
Регистрация: 08.04.2013
Сообщений: 1,012
17.01.2018, 10:49 3
ошибка в 8 и9 строке. объявляем массив, хорошо, 9 строка int max1 = arr[0]; и что вы думаете будет в arr[0]? - ответ мусор - довольно непредсказуемое числа в любом случае всегда больше чем вы ожидаете
и поэтому лучше так 8 int arr[n]={}; - массив обнулили или int max1=0;

Добавлено через 14 минут

Добавлено через 3 минуты
ошибка и в 13 тоже, запоминаем номер, а надо найти возраст запомнить номер а max1 у нас возраст должен быть не номер

Добавлено через 5 минут
а какой массив за что отвечает? по коду и не определишь, тараканы ваши
1
98 / 97 / 11
Регистрация: 12.09.2016
Сообщений: 194
17.01.2018, 11:52 4
Accepted с первого раза
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
int main()
{
    int n; // количество жильцов
    int v,s; // возраст и пол
    cin>>n;
    int max=0; // максимальный возраст
    int k=0;// номер
    for(int i=0;i<n;i++)
    {
        cin>>v>>s;
        if(v>max&&s==1) 
        {
            max=v;
            k=i+1;
        }
    }
    if(k==0) k=-1;
    cout<<k<<endl;
    return 0;
}
Почему-то в последнее время все всё пытаются через массив делать.
1
280 / 228 / 129
Регистрация: 08.04.2013
Сообщений: 1,012
17.01.2018, 13:00 5
Вывод в файл допилить самому разрешается
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <fstream>
#include <cstdlib>
 
using namespace std;
 
int main() {
  int age, pol, maxV=0 ;
  int N,k=0;
  /*  Открыть файл для чтения ↓*/
  ifstream in ("Input.txt");
    if( !in)
    {
        cout<<"Ошибка открытия файла";
        system("pause");
        return 1;
    }
   /*  Прочитать из файла первое число  */
   in >> N;  // 
    N=0;    // чтоб не плодить переменные
while(!in.eof())
{
    in >> age >> pol;
    k++;
    if (age > maxV && pol==1) {maxV=age; N=k;}
}
  in.close();
    if (N==0) cout << -1;
    else {
    cout << "maxN-" << N;}
   return 0;
}
1
1451 / 918 / 806
Регистрация: 30.04.2016
Сообщений: 3,092
18.01.2018, 19:59 6
Лучший ответ Сообщение было отмечено calcoolator как решение

Решение

calcoolator, здравствуйте! Я решал так. Все тесты пройдены:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <bits/stdc++.h>
  
using namespace std;
  
int main()
{
    ifstream fin("input.txt");
    ofstream fout("output.txt");
    int N, age, sex, max, num, k;
    fin >> N;
    max = k = 0;
    for (int i = 0; i < N; i++)
    {
        fin >> age >> sex;
        if ((age > max) && (sex == 1))
        {
            max = age;
            num = k + 1;
        }
        else if (!k)
        {
            num = -1;
        }
        k++;
    }
    fout << num << "\n";
    fin.close();
    fout.close();
    system("pause");
    return 0;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.01.2018, 19:59

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Структуры: определить фамилию самого высокого юноши и средний рост студентов мужского пола
Здравствуйте!уважаемые программисты! помогите мне пожалуйста решить задачу:( имеется список...

Найти самого старшего и самого младшего участника соревнований
Помогите ,пожалуйста)) Имеются два массива: в первом – фамилии участников соревнований, во втором...

Найти самого старшего и самого младшего участника соревнований
Имеются два массива: в первом – фамилии участников соревнований, во втором – их возраст. Найти...

Определить порядковый номер самого старшего по возрасту человека
В массиве хранится информация о годе рождения каждого из 30 человек. Определить порядковый номер...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.