|
|
|
|
|
для: bronenos
(16.12.2008 в 18:03)
| | Верю, бывает... :-)
Чем ближе к 5 утра, тем чаще | |
|
|
|
|
|
|
|
для: exp
(16.12.2008 в 12:08)
| | Ну да.. побитовый сдвиг.. как раз для первокурсника )) | |
|
|
|
|
|
|
|
для: GeorgeIV
(16.12.2008 в 12:35)
| | Ой, пардон, в пол-2 ночи я уже перестал обращать внимания на то, что это третий раздел for =) | |
|
|
|
|
|
|
|
для: bronenos
(16.12.2008 в 01:19)
| | Вы что то путаете. Прочитайте внимательно разницу между ++i и i++. Никакой из индексов не пропускался, если бы вы запустили мой пример. ++i выполняется в КОНЦЕ каждого цикла, а разница в том, что при ++i не создается промежуточной переменной, в отличие от i++. | |
|
|
|
|
|
|
|
для: exp
(16.12.2008 в 03:32)
| | Это был похоже неправильный вариант
конечный вариант вроде такой ,) если простые числа были 3 5 7 11 45
while (i < count) {
if ((A[i] &~ A[i]-1) == 0) A[i] = max;
i++;
} |
// upd:
только-что понял, что 45 не простое число т.к. делится на 5 :)
// ++upd:
разобрался каким боком здесь числа мерсена :)
int i=0,m=1,u=1; //
for (i=1; i< 112; i++) {
char* just ="just";
for (u=1, m=2; m<i; m=(u<<1)+1, u = m) {
if ((i % m) == 0) {
just ="NO";
break;
}
}
printf(" %i %s\n", i, just);
} |
| |
|
|
|
|
|
|
|
для: GeorgeIV
(15.12.2008 в 18:33)
| | попробовал убавить лишних проверок в цикле
но как-то сомнительно :)
// заполнение и распечатка
i=0;
int u=3; //
while (i < count) {
u=3;
if ((A[i] &~ A[i]-1) == A[i]) { // числа мерсена
while (u<A[i]/* && A[i]<max*/ ) {
if ((A[i] % u) == 0) {
A[i] = max;
break;
}
u++;
}
}
else A[i] = max; // не мерсена
printf("A[%i] = %i\n", i, A[i]);
i++;
} |
где-то видел замеряли время работы программ , но не понял чем это делали. | |
|
|
|
|
|
|
|
для: GeorgeIV
(15.12.2008 в 18:33)
| | Потому что ++i сначала делает инкремент, а потом возвращает значение, поэтому у Вас какой-то индекс, считайте, не отрабатывался, в итоге не весь массив проходил проверку.. | |
|
|
|
|
|
|
|
для: dimaangel
(15.12.2008 в 17:49)
| | может быть такими функциями надо ?
#include<stdio.h> // для printf();
#include<conio.h> //для необязательных getch(), putch()
// для sizeof() не помню и надо-ли чего-нибудь :)
int main() {
int A[10] = {3,5,45,34,18,11,7,56,78,89};
// массив
int i=0, max=A[0]; // максимум и счётчик
const int count = sizeof(A) / sizeof(int);
// и не знаю как обычно узнают размер массива
printf(" ---\nв массиве %i елементов\n\n", count);
while ((i+=1) < count) { // поиск
if (A[i] > max) max= A[i];
printf("max = %i\n", max);
}
printf(" ---\n\nмаксимальное значение %i\n", max);
i=0;
while (i < count) { // заполнение и распечатка
A[i] = max;
printf("A[%i] = %i\n", i, A[i]);
i++;
}
getch(); // задержка и выход
putch(7);
return 0;
} |
| |
|
|
|
|
|
|
|
для: bronenos
(15.12.2008 в 17:32)
| | P.S. В цикле ++i было несовсем прально |
Почему? | |
|
|
|
|
|
|
|
для: dimaangel
(15.12.2008 в 17:49)
| | А проще уже некуда, дальше только калькулятор... | |
|
|
|
|