Форум » Обработка числовых последовательностей » Сумма троек чисел, некратная четырем. » Ответить

Сумма троек чисел, некратная четырем.

Sidr: Здравствуйте, если вам не сложно, ответьте: может ли моё решение данной задачи оцениваться в 4 балла? На вход подаётся набор из троек неотрицательных чисел. Сначала вводится кол-во троек, затем сами тройки чисел: 3 2 40 1000 9 87 3500 1234 874 99. Необходимо найти сумму наибольших членов троек, некратную 4-ем. Если такая отсутствует, то выводится : 0. Моё решение : #include <stdio.h> int main(void) { int j,sum,d,last,number; char i = 0; j=i=sum=d=last=number=0; int max1,max2; // max1 - первое самое большое число, max2 - второе max1=max2=0; int Dmin = 1001; printf ("Введитие кол-во троек:"); scanf("%d",&number); int a[3]={0,0,0}; for (j=0;j<number;j++){ // НАЧАЛО БОЛЬШОГО ЦИКЛА ОБРАБОТКИ ТРОЙКИ ЧИСЕЛ scanf("%d%d%d",&a[0],&a[1],&a[2]); for (i=0;i<3;i++){ if (a[i]>=max1){ max1=a[i]; max2=max1; } } sum = sum + max1; if ((max1-max2)%4!=0) // нахожу разницу между двумя самыми большими числами из тройки, которая некратна четырем. d = max1 - max2; if (( max1 - (a[0]+a[1]+a[2] - max1 - max2))%4!=0) // нахожу разницу между самым большим и самым маленьким числом, так же не кратная четырем. last = max1 - (a[0]+a[1]+a[2] - max1 - max2); if (last<d) d=last; // нахожу самую минимальную разницу между элементами, некратную четырем. if (d<Dmin) Dmin=d; // в конце цикла сравниваю с предыдущей разницей max1=0; max2=0; // обнуляю переменные для нахождения максимального элемента. }//КОНЕЦ БОЛЬШОГО ЦИКЛА ОБРАБОТКИ ТРОЙКИ if (sum%4==0 && Dmin <1001 && sum !=0){ sum = sum - Dmin; printf("\n %d",sum); } if (sum %4!=0) printf("\n %d",sum); else if (sum == 0 || Dmin == 1001)printf("\n 0"); getchar(); // Просто чтобы консоль не закрылась сразу getchar(); return 0; }

Ответов - 4

Sidr: Я ведь правильно понимаю, что эффективнее нахождение максимума в тройке чисел не сделать, ведь даже функции max(),min() например в С++ зависят от кол-ва элементов,которые придётся выделять в памяти, прямо как и в моём "алгоритме"? В своей программе я их не использую, так как слышал, что их нет в стандарте Cи. Возможно в С11 есть, но это не точно. С другой стороны, если делать через max() min(),то не нужен будет индекс под массив a[3]. Но под индекс в тройке я выделил 1 байт, надеюсь это небольшой грех для ЕГЭ

egorea1999: Скинь, пожалуйста полное условие, по-моему я такую задачу уже решал, если память не изменяет И судя по решению у тебя все верно

Sidr: egorea1999 пишет: Скинь, пожалуйста полное условие, по-моему я такую задачу уже решал, если память не изменяет http://i.imgur.com/4Z1Yvkk.jpg


egorea1999: Лови, вроде так: https://pastebin.com/hemeP5dQ



полная версия страницы