Перейти к содержанию

помогите решить несколько задачек.


Рекомендуемые сообщения

1.Упорядочить массив целых положительных чисел в порядке убывания сумм цифр встречающихся в их записи.

Ну тут суть в том, что пользователь вводить массив чисел.например, 2,5,9,12,138.программа должна вывести 12(т.к. 1+3+8=12),9,5,3(т.к. 1+2=3),2.

я знаю только как из числа вытащить первую и последнюю цифру,но если число будет 981273598231757231571235789 то как мне сложить все цифры?

2.получить произведение минимальных элементов столбцов действительной матрицы размера 4х5.

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

# include

# include

# include

using namespace std;

int main()

{

setlocale(LC_ALL,"Russian");

const int n=4,m=5;

int x[n][m];

int i,j,min1,min2,a;

cout << "введите матрицу размера " << n << "х" << m <

for (i=0;i

for (j=0;j

cin >> x[j];

min1=x[0][0];

if(x[0]

do

{

i++;

}

while(i

min1=x[0];

min2=x[0][1];

if(x[0][j]

do

{

j++;

}

while(j

min2=x[0][j];

cout << "мин1= "<< min1 << " мин2= " << min2 << endl;

a=min1*min2;

cout << "произведение минимальных элементов столбцов матрицы равно" << a << endl;

system("pause");

return 0;

}

тут суть в том, что у нас есть матрица.нужно в каждом столбце найти минимальное число и перемножить их.

Язык С++.заранее спасибо.

Ссылка на комментарий

1.

int n;//число

int sum=0;

while(n>0){

sum+=n%10;

n/=10;

}

2.


# include
# include
# include
using namespace std;
int main()
{
setlocale(LC_ALL,"Russian");
const int n=4,m=5;
int x[n][m];
int i,j,min1,min2,a;
cout << "введите матрицу размера " << n << "х" << m <for (i=0;ifor (j=0;jcin >> x[i][j];
a=1;
for (i=0;i min1=x[0][i];
for (j=0;j if(min1>x[j][i]){
min1=x[j][i];
}
}
a*=min1;
}
cout << "произведение минимальных элементов столбцов матрицы равно" << a << endl;
system("pause");
return 0;
}

Ссылка на комментарий

спасибо,но объясните, что делает вот эта строчка.


for (i=0;i min1=x[0][i];
for (j=0;j if(min1>x[j][i]){
min1=x[j][i];

насколько я понял, она самая главная в программе и именно она ищет минимальные числа.но куда она запоминает их?

Ссылка на комментарий

у тебя в памяти уже сидит матрица.

Далее пробегаешься по столбцам

заходишь в первый цикл, говоришь пусть первый элемент будет минимальным бежишь по столбцу и проверяешь, а вдруг другой элемент меньше чем мой минимум и тут бац находишь его и говоришь теперь ты будешь минимумом :) в конце пробежки столбца умножаешь текущее значение минимума на переменную а. Далее идет следующий столбец, перетираем предыдущее значение минимума новым значением 1 элемента текущего столбца) и т.д. пока столбцы не кончаться :)

в конце у тебя в переменной а уже полное произведение минимальных элементов матрицы

P.S. Есть такая крутая штука как трассировка) и подсматривалка(watch) тупо бегаешь по строчкам кода и смотришь текущее состояние переменных :)

Ссылка на комментарий
у тебя в памяти уже сидит матрица.

Далее пробегаешься по столбцам

заходишь в первый цикл, говоришь пусть первый элемент будет минимальным бежишь по столбцу и проверяешь, а вдруг другой элемент меньше чем мой минимум и тут бац находишь его и говоришь теперь ты будешь минимумом :) в конце пробежки столбца умножаешь текущее значение минимума на переменную а. Далее идет следующий столбец, перетираем предыдущее значение минимума новым значением 1 элемента текущего столбца) и т.д. пока столбцы не кончаться :)

в конце у тебя в переменной а уже полное произведение минимальных элементов матрицы

P.S. Есть такая крутая штука как трассировка) и подсматривалка(watch) тупо бегаешь по строчкам кода и смотришь текущее состояние переменных :)

спасибо)все разжевано)

Ссылка на комментарий
(т.к. 1+3+8=11)
Для начала это исправь.

Создаешь новый массив - B, того же размера, что и первый - A. И поочередно записываешь сумму цифр следующего числа (скажем sum)в этот массив - B, сравнивая sum с числами в массиве B - если sum>B, то i++ и дальше проверяешь. Если нет - то записываешь его на i-е место, а все числа после него перемещаешь на 1 пункт.

Таким образом, сумму опять не надо никуда записывать.

Ссылка на комментарий
(т.к. 1+3+8=11)
Для начала это исправь.

Создаешь новый массив - B, того же размера, что и первый - A. И поочередно записываешь сумму цифр следующего числа (скажем sum)в этот массив - B, сравнивая sum с числами в массиве B - если sum>B, то i++ и дальше проверяешь. Если нет - то записываешь его на i-е место, а все числа после него перемещаешь на 1 пункт.

Таким образом, сумму опять не надо никуда записывать.

массив создается при помощи for?

Ссылка на комментарий

Ну тогда используй 1.

1) Берешь 1-й элемент. Находишь сумму цифр. Переписываешь.

2) Берешь n-й элемент. Находишь сумму цифр (sum). Поочередно сравниваешь, начиная с i=1 и до (n-1) - если sum>x, то в цикле от j=(n-2) до (downto) i переносишь все элементы массива на следующее место. (x[j+1]=x[j]). Затем записываешь x=sum

ps. возможно начинать нужно не с 1 а с 0, если Си++

Ссылка на комментарий

кароче, вот что получилось после долгой умопытки.

1.Упорядочить массив целых положительных чисел в порядке убывания сумм цифр встречающихся в их записи.

мой код.неправильный,но есть в нем хоть капля просвета?

# include

# include

# include

using namespace std;

int main()

{

setlocale(LC_ALL,"Russian");

cout <<"введите ряд чисел" << endl;

int a[n],i,j;

int sum[m],help;

cin >> a[n];

sum[m]=0;

help=a[0];

while(n>0)

{

sum+=n%10;

n/=10;

}

for(j=1;i

for(i=0;j

if(sum[n]>sum[n+1])

{

help=sum[n];

sum[n+1]=a[0];

}

cout << "новый ряд " << sum << endl;

system("pause");

return 0;

}

Ссылка на комментарий

Чистая пустыня тьмы

Давненько не программировал. Так что не суди строго. Тело:


{
int a[],n,m,i,j,k;
int sum;
cout <<"введите N" << endl;
cin >> n;
cout <<"введите ряд чисел" << endl;
for (i=0;i cin >> a[i];

for (i=0;i{
while(a[i]>0)
{
sum+=a[i]%10;
a[i]/=10;
}
m=0;
for(j=0;j {
if (sum>a[j])
{
for (k=i-1;k>j;k--) a[k+1]=a[k];
}
else continue;
m=j;
break;
}
a[m]=sum;
}
cout << "новый ряд ";
for (i=0;i cout << a[i];
system("pause");
return 0;
}

не могу нигде проверить верность кода:(

Ссылка на комментарий

Ну ты совсем Си++ не знаешь чтоли! Сначала хоть одну книжку прочитай!

Не помню. Кажется

 int a[]=new [n];

Возможно без скобок после а и без int (при условии что массив уже объявлен)

Ссылка на комментарий

просто я серьезно заболел и пропустил все пары про массивы и функции.а я такой человек, что теорию не могу понять без практики.читаю лекции, но ничего не понимаю.а как задачку сделаю, так все понятно становиться.а без этих задач к сессии не допустят.

и кстати,я не могу делать вот это

Не помню. Кажется

 int a[]=new [n];

Возможно без скобок после а и без int (при условии что массив уже объявлен)

так как мы не проходили это на парах.что я скажу преподу?=)

Ссылка на комментарий

Скажи, читаешь дополнительную литературу!

попробуй тогда как во втором примере -


int sum;
cout <<"введите N" << endl;
cin >> n;
int a[n];
cout <<"введите ряд чисел" << endl;
for (i=0;i cin >> a[i];
int n,m,i,j,k;

Если и здесь не получится - сделай из n константу

Ссылка на комментарий

2 варианта можешь сделать типа такого:

#define n 5 ------> задаешь кол-во элементов заранее в коде :)

или

int a[100]; ------> задаешь кол-во элементов с клавы, но не превышающих 100 :) некрасивый способ правда)

P.S. Самый лучший способ - это метод тыка :) Впринципе мы можем написать тебе полное решение твоей задачи :) но тогда ты не научишься кодить :) А метод тыка это примерно так) закодил, посмотрел, выдало ошибки---> почитал, исправил---> не получилось, почитал help, не получилось Internet в помощь :)

Ссылка на комментарий

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...