Другие языки программирования и технологии

помогите решить задачу по Си

Пусть дана матрица m * n, состоящая из чисел. В каждом столбце обнулить минимальное количество элементов так, чтобы сумма элементов столбца не превышала заданную. Для нахождения суммы элементов массива использовать функцию.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

int cmix(int **a, int cn, int rd) {
int m = 0;
--rd;
while (rd > 0) {
if (a[rd][cn] > a[m][cn]) {
m = rd;
}
--rd;
}
return m;
}

int csum(int **a, int cn, int rd) {
int s = 0;
while (rd) {
s += a[--rd][cn];
}
return s;
}

int main() {
int **a;
int r, c, n, m, v;
printf("n m ? "); scanf("%d %d", &n, &m);
puts("a: ");
a = malloc(n * sizeof(int *));
srand(time(0));
for (r = 0; r < n; ++r) {
a[r] = malloc(m * sizeof(int));
for (c = 0; c < m; ++c) {
a[r][c] = rand() % 100;
printf("=", a[r][c]);
}
puts("");
}
printf("v? "); scanf("%d", &v);
for (c = 0; c < m; ++c) {
while (csum(a, c, n) > v) {
a[cmix(a, c, n)][c] = 0;
}
}
puts("a:");
for (r = 0; r < n; ++r) {
for (c = 0; c < m; ++c) {
printf("=", a[r][c]);
}
puts("");
free(a[r]);
}
free(a);
return 0;
}
Александр Вахтеров
Александр Вахтеров
78 252
Лучший ответ
// Максим_Шкуренко_2011-12-03
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>

#define N 8
#define M 16

int Summa(int * Array, const int line, const int column, int currentIndex);

int main(void)
{
do
{
srand((unsigned) time(NULL));
int a[N][M];

for (int n = 0; n < N; n++, printf("\n"))
for (int m = 0; m < M; m++)
{
a[n][m] = rand() % 9 + 1;
printf(" %d", a[n][m]);
}

intsumSet, sumReal, max, indexMaxElem, next = 0;

printf("\n Input Summa: ");
scanf("%d", &sumSet);

for (int m = 0; m < M; m++)
{
sumReal = Summa(&a[0][0], N, M, m);

if (sumReal <= sumSet) continue;
else if (sumReal - a[0][m] <= sumSet)
{
a[0][m] = 0;
continue;
}
else
{
max = a[0][m]; next = 1; indexMaxElem = 0;

for (next; next < N; next++)
if (max < a[next][m])
{
max = a[next][m];
indexMaxElem = next;
}

if (sumReal - max <= sumSet)
{
a[indexMaxElem][m] = 0;
continue;
}
else
{
a[indexMaxElem][m] = 0;
sumReal -= max;
m--;
}
}
}
printf("\n");
for (int n = 0; n < N; n++, printf("\n"))
for(int m = 0; m < M; m++)
printf(" %d", a[n][m]);

getch();
system("cls");
}
while (1);

return 0;
}
ты хотябы компилятор си усебя установи для приличия....
Разложи на действия, и напиши, я в тебя верю!
Shodlik Sobirov
Shodlik Sobirov
821