Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Помогите исправить код


Автор: Truegirl 13.12.2008, 17:13
Уважаемые программисты, очень срочно надо исправить код, но я не пойму  почему  он неправельно работает.
Вот задание
Найти наибольшую последовательность в массиве, и вывести ее произведение.(под последовательностью подразумевается одинаковые числа, например 123455555567696, 555555- это последовательность)
Код выводит наибольшую последовательность, но когда надо подсчитать произведение, он выводит какой-то бред. 
Заранее спасибо
Код
 #include<stdio.h>
#include<conio.h>
#include <conio.h>
#define N 50
main()
{
    int a[N];
    int i,k,n,sum=1,r,max,m;
    int    pro=1;
    printf("Input the dimension of array\n");
    scanf("%d",&n);
    printf("elements of array\n");
    for (i=0;i<n;i++)
    {
        printf("a[%d]=",i+1);
        scanf("%d",&r);
        a[i]=r;
    }

    for(i=0;i<n;i++)
    {    
        if (a[i]==a[i+1]){
            sum++;
            k=sum;}
        if (a[i]!=a[i+1]){
            sum=1;
        }    
            if (i == 1){
            max = sum;
            m=1;}
        else if (sum >max){
            max = sum;
            m=i;}
        
    }

    
    for(i=m;i<n;i++){
        pro*=a[i];}

    printf("%d\n",max);
    printf("%d",pro);
    return 0;
    getch();
}



Автор: 2p0i 13.12.2008, 17:22
Первое, что бросается в глаза - у вас в цикле i меняется от 0 до n-1, и вы сравниваете i-й элемент с (i+1)-м, но для i=n-1 будет сравнение с несуществующим элементов.

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

Автор: Lazin 13.12.2008, 17:38
Код

 #include<stdio.h>
#include<conio.h>
#include <conio.h>
#define N 50
main()
{
    int a[N];
    int i,k,n,sum=1,r,max,m;
    int    pro=1;
    printf("Input the dimension of array\n");
    scanf("%d",&n);
    printf("elements of array\n");
    for (i=0;i<n;i++)
    {
        printf("a[%d]=",i+1);
        scanf("%d",&r);
        a[i]=r;
    }
    m = 0;
    for(i=0;i<n;i++)
    {    
        if (a[i]==a[i+1]){
            if (a[m] != a[i]) m = i;
            sum++;
            k=sum;}
        if (a[i]!=a[i+1]){
            sum=1;
        }    
            if (i == 1){
            max = sum;
            m=1;}
        else if (sum >max){
            max = sum;
            m=i;}
        
    }
    
    for(i=m;i<n;i++){
        pro*=a[i];}
    printf("%d\n",max);
    printf("%d",pro);
    return 0;
    getch();
}

как-то так

Автор: Truegirl 13.12.2008, 23:29
Все равно не получается,  выводит неправельное произведение. Если я не ошибаюсь, то должно выводиться элемент массива в степени кол-ва элементов? А выводиться вообще непонятное значение. HELP ME PLEASE

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)