Задачка на С++ помогите plz!
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Задача вот такая:В заданной целочисленной матрице Ам*n среди строк содержащих только нечётные элементы, найти строку с max суммой модулей элементов...
нужно решить через указатели в С++.
как её переделать? что б она была через указатели...
есть решение, но не через указатели... :
#include <stdio.h>
#include <conio.h>
#define N 3 //Размер квадратной матрицы
void main()
{
int m[N][N+1]; //последний столбец используем для хранения суммы эл-тов строки
int max; //Строка с max суммой элементов
int i,j;
puts("\nОпределение строки с max суммой эл-тов");
printf("Введите матрицу %ix%i\n",N,N);
for (i=0;i<N;i++)
{
printf("Эл-ты %i-й строки ->",i+1);
for(j=0;j<N;j++)
scanf("%i",&m[j]);
}
//сумма для каждой строки
for (i=0;i<N;i++)
{
m[N]=0;
for (j=0;j<N;j++)
m[N]+=m[j];
}
//поиск строки с max суммой
max=0;
for (i=1;i<N;i++)
if(m[N]>m[max][N])
max=i;
printf("\nВ %i-й строку сумма эл-тов",max+1);
printf("max u=%i\n", m[max][N]);
printf("\nДля завершения нажмите <Enter>\n");
getch();
}
нужно решить через указатели в С++.
как её переделать? что б она была через указатели...
есть решение, но не через указатели... :
#include <stdio.h>
#include <conio.h>
#define N 3 //Размер квадратной матрицы
void main()
{
int m[N][N+1]; //последний столбец используем для хранения суммы эл-тов строки
int max; //Строка с max суммой элементов
int i,j;
puts("\nОпределение строки с max суммой эл-тов");
printf("Введите матрицу %ix%i\n",N,N);
for (i=0;i<N;i++)
{
printf("Эл-ты %i-й строки ->",i+1);
for(j=0;j<N;j++)
scanf("%i",&m[j]);
}
//сумма для каждой строки
for (i=0;i<N;i++)
{
m[N]=0;
for (j=0;j<N;j++)
m[N]+=m[j];
}
//поиск строки с max суммой
max=0;
for (i=1;i<N;i++)
if(m[N]>m[max][N])
max=i;
printf("\nВ %i-й строку сумма эл-тов",max+1);
printf("max u=%i\n", m[max][N]);
printf("\nДля завершения нажмите <Enter>\n");
getch();
}
Как я понимаю под указателями ты имеешь ввиду динамический массив? если так, то надо только изменить в начале
на
и в конце добавить
кроме того я неувидел определения четные ли элементы строки и кроме того второй цикл и дополнительная ячейка в каждой строке совсем не нужна. Я бы эти два цикла обьединил в один -
На выходе если bIsOdd равен FALSE - ни одной строки только с четными элементами нет.
Иначе в nMax лежит максимальная сумма строки а в nIndex - индекс этой строки
P.S. писался код прямо здесь, так что за абсолютную синтаскическую правильность не ручаюсь, и попрошу тупо не копировать в свой код а подумать всетаки куда и как
Код: Выделить всё
int m[N][N+1];
Код: Выделить всё
int** m = new int*[N];
for (int k=0; k<N; k++)
m[k] = new int[N+1];
Код: Выделить всё
for (k=0; k<N; k++)
delete[] m[k];
delete[] m;
Код: Выделить всё
int nMax = 0;
int nIndex = 0;
int nNowMax = 0;
BOOL bIsOdd = FALSE;
for (i=0;i<N;i++)
{
//определяем сумму и проверяем на четность
for (j=0;j<N;j++)
{
if (m[i][j]%2)
break;
nNowMax+=m[i][j];
}
if (j == N) //все элементы четны
{
if (nNowMax > nMax || !bIsOdd) //сумма больше максимальной, или ещё ни разу в nMax не записывалось ни одно значение
// т.е. nMax не валиден
{
nMax = nNowMax;
nIndex = i;
bIsOdd = TRUE;
}
}
}
Иначе в nMax лежит максимальная сумма строки а в nIndex - индекс этой строки
P.S. писался код прямо здесь, так что за абсолютную синтаскическую правильность не ручаюсь, и попрошу тупо не копировать в свой код а подумать всетаки куда и как
Вы меня правельно поняли. Во всём разобрался, но только одного не понял:
BOOL bIsOdd = FALSE;
C++ не понимает этой строчки... а именно С++ не понимает - BOOL, вообще что это такое?
и в конце тоже самое:
bIsOdd = TRUE;
сдесь ему не нравится TRUE...
не до понял я....
BOOL bIsOdd = FALSE;
C++ не понимает этой строчки... а именно С++ не понимает - BOOL, вообще что это такое?
и в конце тоже самое:
bIsOdd = TRUE;
сдесь ему не нравится TRUE...
не до понял я....
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Вообще С++ должно понимать С-шные декларации. Это, как минимум, странно. Короче попробуй заменить:
Код: Выделить всё
BOOL -> bool
FALSE -> false
TRUE -> true
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
[quote="Sozer"]Вы меня правельно поняли. Во всём разобрался, но только одного не понял:
BOOL bIsOdd = FALSE]
Странный у тебя С++
BOOL bIsOdd = FALSE]
Странный у тебя С++
Блин, я бы постыдился такое писать... Этому наверное даже в школе учат...BOOL bIsOdd = FALSE;
C++ не понимает этой строчки... а именно С++ не понимает - BOOL, вообще что это такое?
и в конце тоже самое:
bIsOdd = TRUE;
сдесь ему не нравится TRUE...
не до понял я....
P>S> Без обид, но это даже слишком
Усложнять - легко, упрощать - сложно
Код: Выделить всё
#define TRUE 1
#define FALSE 0
Усложнять - легко, упрощать - сложно
Да ладно вам=)
Ну не знает человек ... не надо уж издеваться то=)
А серьезно .. если заменить BOOL на bool, TRUE на true, FALSE на false усе должно сработать
Ну не знает человек ... не надо уж издеваться то=)
А серьезно .. если заменить BOOL на bool, TRUE на true, FALSE на false усе должно сработать
-
- Сообщения: 35
- Зарегистрирован: 12 май 2004, 15:34
- Откуда: Москва
Только вот если человек писал на Borland C++ 3.1 ему это вряд ли поможет.А серьезно .. если заменить BOOL на bool, TRUE на true, FALSE на false усе должно сработать

- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Тогда выход такой:
После приведённый участок кода будет справедлив.
Код: Выделить всё
enum { FALSE = 0, TRUE } BOOL;
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.