Страница 1 из 1

2 мааааааленьких задачки!!!

Добавлено: 22 дек 2007, 18:51
Задрот
Господа Гуру, поймите, нет времени совсем, учу матан, скоро сессия, а нужно еще две задачки на Си написать, помогите плз. Работаю на Си 2.0(использовать станд. операторы ввода-вывода printf и scanf, стандартные библиотеки stdio.h , stdlib.h, math.h)

1. Определить, является ли число полиндромом (читается взад, вперед одинаково, например 121)

2.Найти максимум среди сумм элементов диагоналей целочисленной квадрат. матрицы, параллельных главной.

черновой листинг для второй:

#include <stdio.h>
#include <math.h>
#include <conio.h>

void main(void)
{
int r,a[10][10],n,i,j,M,s1,s,tmp;
clrscr();
printf("Введите размерность матрицы");
scanf("%d",&n);
for (i=0;i<n;i++)
for (j=0;j<n;j++)
{
printf("Введите элементы матрицы");
scanf("%d",&tmp);
a[j]=tmp;
}
for (i=0;i<n;i++)
for (j=0;j<n;j++)
{ printf("\n %d ",a[j]);}
r=a[0][0];
for (i=0;i<n;i++)
{
s=0;
s1=0;
for (j=1;j<n-1;j++)
{
s+=a[i+j][j+1];
s1+=a[i+1][n-1-j];
}
if ((s>s1>r)||(s1>s>r)) r=s;
}
printf("\n %d ",r);
getch();
}

Re: 2 мааааааленьких задачки!!!

Добавлено: 23 дек 2007, 13:37
Задрот
Ну ПЛЗ!!! Последний раз на ближайший год!)))

Re: 2 мааааааленьких задачки!!!

Добавлено: 24 дек 2007, 11:19
Хыиуду
1. Перевести число в строку.
Пока длина строки больше 1 элемента:
-- если последний элемент равен первому, отрезать первый и последний элементы
-- если не равны - число не является палиндромом.
Если в итоге пришли к пустой строке или строке из 1 символа - число является палиндромом

Re: 2 мааааааленьких задачки!!!

Добавлено: 24 дек 2007, 19:32
Задрот
А конкретный листинг не подкинете случаем?

Re: 2 мааааааленьких задачки!!!

Добавлено: 25 дек 2007, 10:29
BBB
Хыиуду писал(а):1. Перевести число в строку.
Пока длина строки больше 1 элемента:
-- если последний элемент равен первому, отрезать первый и последний элементы
-- если не равны - число не является палиндромом.
Если в итоге пришли к пустой строке или строке из 1 символа - число является палиндромом
Ну, можно и не резать. Зачем нам лишняя кровь? :) Просто вот такой примерно цикл:

Код: Выделить всё

blIsPalindrom = true;
iStrLen = (strlen (str);
for (i =0; i < (iStrLen + 1) / 2); i++) {
  if (str [i] != str [iStrLen - i - 1]) {
     blIsPalindrom = false;
     break;
  };
};
В принципе, условие for можно, пожалуй, даже написть как:
for (i =0; i < iStrLen/ 2); i++)
Разница в том, что при нечетной длине в первом случае средний символ будет сравниваться сам с собой, а во втором - не будет. На конечный результат это не повлияет.