помогите с Си, надо решить две задачи...иначе меня выгонят..

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: помогите с Си, надо решить две задачи...иначе меня выгонят..

Bikutoru » 13 окт 2004, 08:30

Лирическое отступление:

10!=328800 (10>3 -> Можно)
k=147: k*(k+1)*(k+2)=147*148*149=3241644<10!
k=148: k*(k+1)*(k+2)=148*149*150=3307800>10!

... Если условие верно от 3 до 6, то как быть с числами от 7 и выше?.. Ведь 7!=5040, а это даже в signed int поместится... нужно либо искать новые условия, либо писать общий случай (но замечание от 3 до 6 безусловно интересное :-) )

chur » 10 окт 2004, 22:50

условие будет верно для N от 3 до 6 дальше расходятся
Это неочевидно, поэтому далее дожно следовать строгое доказательство.

Да и вопрос был по програмированию, а не по математике, что несколько отличается.

Andragen » 10 окт 2004, 20:43

извиняюсь но выше был тоже я :)
void min_on_diag(int *mat,int n){//mat указатель на матрицу n размерность матрицы
int min,ind,tmp;
if(n<=0)return;

for(int i=0;i<n;i++){
min=mat[0];
ind=0;
for(int j=1;j<n;j++){
min>mat[j]?min=mat[j],ind=j:;
}
tmp=mat[n-1-i][n-1-i];
mat[n-1-i][n-1-i]=min;
mat[ind]=tmp;
}
}

deadem » 10 окт 2004, 20:07

Andragen писал(а):Предлагаю следующую формулу исходя из определения фактоиала :)
Фактоиал числа N есть произведение всех чисел от 1 до N и чтобы в это произведение можно было представить как произведение трёх последовательных чисел то N должен быть >=3
небольшая поправка: N должен быть РАВЕН 3, иначе N будет представлено в виде четырёх или более. что противоречит условию ;)

ps. а что такое "побочная диагональ"? ;)

Bikutoru » 28 сен 2004, 08:21

Думаю, что для "первого ... семестра ..." это не так принципиально, ну а вообще согласен, лучше использовать не int, а что-то покрупнее, например float. К тому же, я это писал после 11 часов работы для того,
чтобы хоть немного отвлечься, так что думать тогда мне было не только тяжело, но и противопоказано :lol:

chur » 26 сен 2004, 01:03

Маленькое замечание :)
//Проверка
int k;
for (k=1; (k*(k+1)*(k+2)) < fN; k++) {
;
}
if ((k*(k+1)*(k+2)) == fN) {Ok = true;}

Правда факториал 13 уже больше чем 2^32.

Bikutoru » 25 сен 2004, 22:06

Первая решается вот так:

#include <iosteam.h>

int fact(int N) //Расчет факториала N
{
int result=1;

for (int i=2; i<=N; i++)
result=result*i;

return result;
}

void main()
{
int fN;
bool Ok;

cout<<"Введите N ";
cin>>N;

fN=fact(N); //Расчет факториала
Ok=false;

for (int k=1; k<=N-2; k++)
if (k*(k+1)*(k+2)==fN) //Проверка соответствия требуемому виду
{
Ok=true; //Установка флага

break;
}

if (Ok) //Вывод результата в зависимости от значения флага
cout<<"Можно"<<endl;
else
cout<<"Нельзя"<<endl;

}

А над второй думать сейчас лень...

Вернуться к началу