Top.Mail.Ru
Ответы

Помогите решить задачу на Си(Срочно, лабу сдавать уже сегодня!!)

Для последовательности целых чисел заданной длины N (вводится в диалоге с пользователем)
подсчитать общую сумму и количество элементов заданной последовательности, которые расположены между первым элементом последовательности значение которого равно квадрату его порядкового номера и последним кратным трем элементом последовательности.

Вот мое решение, но это скорее всего ахинея)

По дате
По рейтингу
Аватар пользователя
Новичок
12345678910111213141516171819202122232425262728293031
 #include <stdio.h> 
#include <stdlib.h> 
 
#define min(x, y) ((x) < (y) ? (x) : (y)) 
#define max(x, y) ((x) > (y) ? (x) : (y)) 
 
void swap(int *x, int *y){ 
    int t = *x; 
    *x = *y; 
    *y = t; 
} 
 
int main() { 
    int n; 
    printf("Input amount of the elements: "); 
    scanf("%d", &n); 
    int l = n, r = -1; 
    int *a = (int *) malloc(sizeof(int) * n), *p = (int *) malloc(sizeof(int) * (n + 1)); 
    printf("Input elements themselves:\n"); 
    for (int i = 0; i < n; i++) { 
        scanf("%d", &(*(a + i))); 
        *(p + i + 1) = *(p + i) + *(a + i); 
        if (*(a + i) == (i + 1) * (i + 1)) l = min(l, i); 
        if (!(*(a + i) % 3)) r = max(r, i); 
    } 
    if (l > r) swap(&l, &r); 
    if (r - l - 1 <= 0) printf("Amount of suitable elements: 0\nTheir sum: 0"); 
    else printf("Amount of suitable elements: %d\nTheir sum: %d", r - l - 1, *(p + r) - *(p + l + 1)); 
    free(a); 
    free(p); 
} 
Аватар пользователя
Ученик

ну и редкостную ерунду ты написал. Надо же было до такого вообще додуматься...)