Смекни!
smekni.com

Сформулируем эту задачу следующим образом. В каждой строке i массива A выберем максимальное среди чисел A[i, j] (j не равно i) и сложим его с A[i, i]. Найти i, при котором соответствующая сумма будет минимальна.

#include <stdio.h>

#define K 20

main()

{int i,j,k,i1,s,t,a[K][K];

scanf("%d",&k);

for (i=0;i<k;i++)

for(j=0;j<k;j++) scanf("%d" ,&a[i][j]);

for (i=0;i<k;i++)

{for (s=0,j=0;j<k;j++)

if(j!=i && s<a[i][j]) s=a[i][j];

s+=a[i][i];

if (i==0 || s<t) {i1=i; t=s;}

}

printf("%d&bsol;n" ,i);

}

Задача N16.

Даны два упорядоченных массива a[1]<=a[2]<=...<=a[m] и

b[1]<=b[2]<=...<=b[n]. Образовать из них упорядоченный массив

c[1]<=c[2]<=...c[m+n].

Эта задача принципиально должна быть выполнена за m+n действий. Возьмем из A и B по первому элементу. Меньший из них занесем в С и заменим следующим из его же массива. Снова выберем меньший из двух, занесем в С и т.д.

После каждого сравнения в С добавляется элемент - значит, сравнений будет меньше, чем m+n. Нужно только позаботиться о том, чтобы программа работала верно и при исчерпании одного из массивов.

#include <stdio.h>

#define mm 100

#define nn 100

main()

{ int m,n,i,j,k,a[mm],b[nn],c[mm+nn];

scanf("%d %d",&m,&n);

for (i=0;i<m;i++) scanf("%d",&a[i]);

for(j=0;j<n;j++) scanf("%d",&b[j]);

for(k=i=j=0;k<m+n; k++)

{if (i>=m) c[k]=b[j++];

else if (j>=n) c[k]=a[i++];

else if (a[i]>b[j]) c[k]=b[j++];

else c[k]=a[i++];

}

for (k=0;k<m+n; k++)

printf("%4d%c",c[k],(k+1)%10==0 || k==m+n-1?'&bsol;n':' ');

}

Задача N17.

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

Написать программу, которая сосчитает и напечатает число прямоугольников.

Эта задача решается следующим образом – прямоугольников столько, сколько их северо-западных углов (иначе говоря - верхних левых). Остается только не запутаться в случае, когда угол стоит у границы.

#include <stdio.h>

#define mm 20

#define nn 20

main()

{ int m,n,j,i,s,a[mm][nn];

scanf("%d %d",&m,&n);

for(i=0; i<=m;i++)

for (j=0;j<n; j++)

if (a[i][j]=i*j) scanf("%d" ,&a[i][j]);

for (s=0,i=1;i<=m; i++)

for (j=1;j<=n; j++)

if (a[i][j] && !(a[i-1][j]+a[i][j-1])) s++;

printf ("%d&bsol;n",s);

}