2014-12-16 3 views
1

Мне было предложено создать программу на C, в которой будет принимать 2d-массив, например. 3 числа и каждый раз найдет сопротивление одного числа, умножив его, пока не будет только одно число. Тогда результат каждого числа будет подан во вторую строку массива.Найти максимальный размер 2d-массива

Например.

Например, постоянство числа 2736 равно 0: сначала мы находим 2 * 7 * 1 * 6 = 252, а затем 2 * 5 * 2 = 20 и, наконец, 2 * 0 = 0, где мы приходим к одной цифре. (который в этом примере равен 0).

Числа для массива будет дано из текстового файла в следующем формате:

2716 2720 

так что номера будут [2716,2720] : 2176 2177 2178 2179 21720

Графический presentaion каждого упорством будет

Number | Persist 
----------------- 
    2716 | 3 
    2717 | 4 
    2718 | 2 
    2719 | 3 
    2720 | 1 

и массив после wil be:

array[5][2] = { {2716,3}, {2717,4}, {2718,2}, {2719,3}, {2720,1} }; 

так в конце концов, мне нужно, чтобы найти номер с maxinum persistanse (в моем случае это 2717) и fprintf его в текстовый файл под названием persist.out со строки и столбца, как это:

2717 4 

Моя проблема в последней части копии массива.

Также нам нужно проверить, имеет ли большее число число больше, а затем найдет максимальное число.

Я написал код для последней части, но не очень стабилен, и я не могу сделать чек, который я хочу.

ОБНОВЛЕНО!

#include <stdio.h> 

int multiply_digits(int x) 
{ 
    int z = 1; 
    while (x) 
    { 
    z *= x % 10; 
    x /= 10; 
    } 

    return z; 
} 



int main() { 

    int a; 
    int b; 

    FILE *input, *output; 

    input = fopen("persist.in","r"); 
    fscanf(input,"%d %d",&a, &b); 
    fclose(input); 


    int c = (b - a) + 1; 

    int array[c][2]; 



    array[0][0] = a; 

    for(int i = 1; i < c; i++) 
    { 

     array[i][0] = a + i; 

    } 



    int i, j; 
    for (i=0; i< c; ++i) 
    { 
     int n = array[i][0]; 
     int j = 0; 
      while (n>9) 
      { 
      n = multiply_digits(n); 
      j++; 
      } 
     array[i][1] = j; 
    } 



    for (i = 0; i < c; i++) 
    { 
     for (j = 0; j < 2; j++) 
     { 
     printf("%d ", array[i][j]); 
     } 
    printf("\n"); 
    } 

    printf("\n"); 

    int indexOfMaximum; 
    int maximum = array[0][1]; 
    for (i = 0 ; i < c ; ++i) 
    { 

     if (array[i][1] >= maximum) { 
    maximum = array[i][1]; 
    indexOfMaximum = i; 
    } 
    } 


} 
+0

В чем вопрос? – 2501

+0

Как я могу найти число с максимальным упорством и как скопировать строку и ее столбец в txt-файл –

+0

, вы должны проверить результат 'fopen'. –

ответ

2

В ваших for петель, ваша остановка условие i <= c должно быть i < c, так как ваш индекс старт 0

Ваш массив объявлен int array[c][2], так что вы читаете мимо конца массива я предполагаю стоимость мусора, которая на самом деле может быть больше maximum, если вы хотите перейти на c, тогда объявите int array[1 + c][2].

Что касается записи его в файл часть вобще

fprintf(output, "%d %d\n", array[indexOfMaximum][0], array[indexOfMaximum][1]); 

Надеется, что это помогает.

+0

ну, может быть, ваше право, но мой код работает, моя проблема другая. Также, если я положил 'i

+0

Если ваш код работает, это случайно. И вы это исправили и попробовали? –

+0

Да и не может быть случайно во всех значениях! –

1

Вам необходимо изменить условие в своем последнем операторе if на> =, чтобы вы действительно получили максимум. С вашим кодом, если большее сохранение появляется несколько раз, вы найдете только первый.

if (array[i][1] >= maximum) { 
    maximum = array[i][1]; 
    indexOfMaximum = i; 
} 
+0

проверено! Но опять же в этом состоянии, как я могу сделать чек, чтобы найти в этом состоянии, большее число? –

+0

Отредактирован ответ. Просто используйте переменную indexOfMaximum и в конце ваши 2 значения: array [indexOfMaximum] [0] и array [indexOfMaximum] [1] – Biniou

+0

Я обновил свой вопрос, но я не мог понять ваш ответ. Проверьте это, пожалуйста! –