Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.07.2010, 21:17   #1
agent007
Пользователь
 
Регистрация: 06.07.2010
Сообщений: 53
Лампочка Траблы с матрицей, ар. прогрессия

Как переделать сие под матирцы, ато я уже совсем раскис, ибо с 9-30 до сих пор в c++ сижу, уже скоро забуду как себя звать.
В каждом столбце матрицы найти наибольшую группу подряд идущих элементов, образующих арифметическую прогрессию + как вывести их потом по-столбцам?
Вот под 1-й массив:
1) В линейном массиве выделить max последовательность,явл.арифметическ ой прогрессией

PHP код:
#include <stdio.h>
#include <tchar.h>
#include <string.h>
#include <stdlib.h>

void main()
{
   
int a[100];
   
int n;
   
printf("n=");
   
scanf("%d",&n);

   for(
int k=0;k<n;k++)
   {
       
printf("a[%d]=",k);
       
scanf("%d",&a[k]);
   }
   
   
int b 0;
   
int k 2;
   
int d a[1] - a[0];
   
int max_b 0;
   
int max_k 2;
   for(
int i=1;i<n;i++)
   {
       if (
a[i+1]-a[i]==d)
       {
           
k++;
       }
       else
       {
           if (
kmax_k)
           {
               
max_k k;
               
max_b b;
           }

           
i;
           
2;
           
a[i+1]-a[i];
       }
   }

   
printf("nach=%d dlina=%d"max_bmax_k);

Мои бесмысленные извращения:
//1) В линейном массиве выделить max последовательность,явл.арифметическ ой прогрессией

PHP код:
#include <stdio.h>

FILE *in,*out;
int main()
{
    
in=fopen("in_4.txt""r");
    
out=fopen("out_4.txt""w");
    if((
in==NULL)||(out==NULL)){ return 0;}
   
int a[100][100];
   
int sh,vs;
   
fscanf(in,"%d",&sh);
    
fscanf(in,"%d",&vs);
   for(
int i=0;i<sh;i++)
   {
       
fprintf(out,"\n");
        for(
int j=0;j<vs;j++){       
       
fscanf(in,"%2d",&a[i][j]);
       
fprintf(out,"%2d",a[i][j]);
       }
   }
   
   
int b 0;
   
int k 2;
   
int d,i,j;
   
int max_b 0;
   
int max_k 2;
   for( 
j=0;j<sh;j++)
   {
       
       for( 
i=0;i<vs ;i++){
        
a[i+1][j]-a[i][j];
       if (
a[i+1][j]==(a[i][j]+d))
       {
           
k++;
       }
       else
       {
           if (
kmax_k)
           {
               
max_k k;
               
max_b b;
           }

           
j;
           
2;
           
       }
       }
   }

   
fprintf(out,"\n nach=%d dlina=%d"max_bmax_k);
for(
int i=max_b+1;i<max_k+max_b+1;i++){
    
fprintf(out,"\n");
    for(
int j=0;j<max_k+max_b+1;j++)
fprintf(out," %d",a[i][j]);
}

agent007 вне форума Ответить с цитированием
Старый 08.07.2010, 21:44   #2
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Код:
template< typename T >
bool isProgression( T *ptr, const int size ){
    if( size <= 0 ) 
        return 0;
    const T d = ptr[ 1 ] - *ptr;
    for( int i = 0; i < size; ++i )
        if( *ptr + d * i != ptr[ i ] )
            return 0;
    return 1;
}
Функция определяет, является ли прогрессией массив типа T, начинающийся с *ptr и имеющий размер size. Может поможет.

Ну и еще, определяем максимальную по размеру арифметическую прогрессию :
Код:
int *maxProgression = array;
int maxSize = 0;
for( int i = 0; i < ARRAY_SIZE; ++i )
    for( int j = i + 1; j < ARRAY_SIZE; ++j )
        if( isProgression( array + i, j - i ) ){
            if( j - i > maxSize ){
                maxSize = j - i;
                maxProgression = array + i;
            }
        } else 
            break;
В итоге получим указатель( maxProgression ) на начало максимальной прогрессии и её размер( maxSize ).
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux

Последний раз редактировалось ozo; 08.07.2010 в 21:54.
ozo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Геометрическая прогрессия Владимир_Мар Общие вопросы Delphi 1 27.05.2010 20:12
Арифметическая прогрессия euhenia Помощь студентам 6 05.02.2010 20:08
Арифметическая прогрессия,строка Lodyr Помощь студентам 2 16.12.2009 07:39
арифметическая прогрессия и матрицы Dane Паскаль, Turbo Pascal, PascalABC.NET 7 23.06.2009 09:37
Арифметическая прогрессия Carbon Помощь студентам 14 09.03.2008 18:12