Премини към съдържанието
  • Добре дошли!

    Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

    Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

     

Помощ за задачи на C/C++ (merged)


Препоръчан отговор

Някой ще удари ли едно рамо с чистото c ,че не мога да разбера какво точно трябва да направя.

Масив A[6,6] съставен от реални числа със стойности в интервала [0;99.99].Да се извърши следното действие елементите на масива A равни на своите съседни елементи да се изнесат в масива C[L,3] заедно с техните индекси.До тук съм :D

  int i = 0 ,k = 0, array_i = 0;

  float A[6][6];

  float C[6*6];

  for (i = 0; i<6; i++){

  for (k=0; k<6; k++){

  do{

  printf("Vavedete %d element ot %d red: ", k+1, i+1);

  scanf("%f", &A[k]);

  } while (A[k] < 0 || A[k] > 99.99);

  }

  }

Здравейте, 

 

Задачата, така написана, поражда доста въпроси:

- Масива C[L,3] трябва да съдържа индексите i и j на въпросния елемент, както и стойността му . Така ли е ? Въпроса е третото поле за какво точно ще е...

- Съседни елементи могат да бъдат 4 броя или 8 - в зависимост от това, дали броим и върховете като граница или само страните. В случая, в задачата не се споменава, така че не е ясно за колко съседа говорим.

 

В имплементацията, сте записал 

float C[6*6];

Това ще направи едномерен масив, а не двумерен, каквото е условието на задачата - трябва да бъде:

float C[6*6][3];

Относно самия алгоритъм за проверка на съседите, мисля, че с картинка най-добре ще се разберат нещата. Трябва да проверявате дали i +/- 1 и j +/- 1 са валидни индекси за масива - ако не са, то тогава там няма съсед. Опитът за достъп до елемент, с индекси, извън масива, ще бъде санкциониран при изпълнение на програмата с доста добър трейс :)

 

Поздрави !

post-62763-0-02094500-1384099597_thumb.p

Линк към коментара
Сподели в други сайтове

  • 2 седмици по-късно...

Здравейте приятели. Бихте ли ми помогнали с една задачка 

Програма с функция main() и избор чрез меню на функции за: 
• Въвеждане от клавиатура на размерност (с проверка за коректност) и елементи на масив от цели числа AM(K) (K <= 30); 
• Изчисляване на произведението от отрицателните числа в масива; 
• Изчисляване на средно-аритметичното от числата в масива, които се делят без остатък на 5; 
• Изчисляване на сумата на различните от нула числа и броя на нулевите числа в масива; 
• Намиране на максималното положително число в масива и неговия пореден номер; 
• Извеждане на екран на резултатите от съответното изчисляване, както и на въведените числа в масива (с подходящи текстове). 

Написъл съм кода , но нещо не мога да отркия къде ми е грешката >> 

#include<iostream.h> 
const K=30; 
double F[K]; 
int N; 

void input() 
{ int i; 
do 

cout<<"Vavedete razmernost na masiva ne poveche ot 30"<<endl; 
cin>>N; 

while(N<1||N>30); 

for(i=0;i<N;N++); 

cout<<"Vavedete element na masiv"<<i+1<<endl; 
cin>>F



void multiplying() 
{ int i; 
double pr=1; 
for(i=0;i<N;i++); 
if(F<0); 
pr*=F
cout<<"Proizvedenieto na otricatelnite chisla e"<<endl; 


void average() 
{double sum; 
int m,i; 
int br=0; 
for(i=0;i<N;i++) 
m=F%5; 
if(m==0); 
sum+=F
br++; 
cout<<"Sredno aritmetichnoto na chislata v masiva koito se delqt bez ostatuk na 5"<<sum/br<<endl; 

void sum0() 

int i; 
int sum; 
int br=0; 
for(i=0;i<N;i++); 
if(F!=0) 
sum+=F
else 
br++; 
cout<<"Sumata na razlichnite chisla ot nula"<<sum<<endl; 
cout<<"Broq na nulevite chisla v masiva e "<<br<<endl; 

void maxn() 
{ double max; 
int i; 
int n; 
for(i=0;i<N;i++); 
if(F>0&&max>F); 
{max=F
n=i; 

cout<<"Maximalnoto polojitelno chislo v masiva e"<<max<<endl; 
cout<<"Poredniqt mu nomer e"<<n<<endl; 


void menu() 
{int izbor; 
do{ 
cout<<"1.Vavejdane na razmernost na masiva i negovite stoinosti"<<endl; 
cout<<"2.Izchislqvane na proizvedenieto ot otricatelnite chisla"<<endl; 
cout<<"3.Izchislqvane na sredno aritmetichno ot chislata ,koito se delqt bez ostatuk na 5"<<endl; 
cout<<"4.Izchislqvane na sumata na razlichnite ot nula chislq i broq na nulevite chisla"<<endl; 
cout<<"5.Namirane na maksimalnoto polojitelno chislo i negoviqt poreden nomer"<<endl; 
cout<<"6.Krai na programata"<<endl; 
cin>>izbor; 
while((izbor<1)||(izbor>5)) 
switch(izbor) 

case 1: 
{ cout<<"Vavejdane na chisla:"<<endl; 
input(); 

case 2: 
{cout<<"Proizvedenie ot otricatelnite chisla:"<<endl; 
multiplying(); 

case 3: 
{cout<<"Sredno aritmetichno na chislata koito se delqt bez ostatuk na 5"<<endl; 
average(); 

case 4: 
{cout<<"Sumata na razlichnite ot nula chislq i broq na nulite:"<<endl; 
sum0(); 

case 5: 
{cout<<"Maksimalnoto polojitelno chislo i negoviq nomer"<<endl; 
maxn(); 

case 6: 
{cout<<"Krai na programata"<<endl; 
return; 


}while(1); 


void main(); 

menu(); 


Ще бъда много благодарна ако някой ми помогне и ми обясни къде греша 

Линк към коментара
Сподели в други сайтове

Придържай се към условието, "масив от цели числа AM(K)" - защо тогава масива е F и то от числа с плаваща запетая?

От там нататък и другите променливи max, sum и pr също трябва да ти са от тип за цели числа.

Дробни числа имаш само при изчисляването на средно аритметично и там може да ползваш double.

Евентуално при произведението също може вместо 64 битово цяло число (long long) да ползваш double - губиш точност, но намаляваш вероятността да получиш грешка от препълване.

Редактирано от ined (преглед на промените)
Линк към коментара
Сподели в други сайтове

Здравейте!Имам нужда от помощ за следната програма на C++:

Да се състави програма,която съдържа следните функции:

-Съставяне на два динамично представени стека с целочислени данни, съдържащи се във външен файл.
-Сортиране на елементите в стековете по метода чрез размяна(метод на мехурчето)

Изграждане на подредена динамична структура дек,съдържащ елементите на двата стека и намиране на най-малкото число по-голямо от средноаритметичната стойност на всички елементи в дека
-Запис на изходните резултати във външен файл.
Главна функция main()-с меню за избор на функции и проверка за състоянието на данните

Линк към коментара
Сподели в други сайтове

Не ми дава ерори,но като въвеждам отначало например 1 ми излиза главното меню.Ако можете помогнете.Ето и кода.
 
 
#include<iostream.h>
 
const int K=30;
double F[K];
int N;
 
void input()
{ int i;
do
{
cout<<"Vavedete razmernost na masiva ne poveche ot 30"<<endl;
cin>>N;
}
while(N<1||N>30);
 
for(i=0;i<N;N++);
{
cout<<"Vavedete element na masiv"<<i+1<<endl;
cin>>F;
}
}
 
void multiplying()
{ int i;
double pr=1;
for(i=0;i<N;i++);
if(F<0);
pr*=F;
cout<<"Proizvedenieto na otricatelnite chisla e"<<endl;
}
 
void average()
{double sum;
int i;
int br=0;
for(i=0;i<N;i++){
    if(!F%5){
        sum+=F;
        br++;
    }
}
cout<<"Sredno aritmetichnoto na chislata v masiva koito se delqt bez ostatuk na 5"<<sum/br<<endl;
}
void sum0()
{
int i;
int sum;
int br=0;
for(i=0;i<N;i++);
if(F!=0)
sum+=F;
else
br++;
cout<<"Sumata na razlichnite chisla ot nula"<<sum<<endl;
cout<<"Broq na nulevite chisla v masiva e "<<br<<endl;
}
void maxn()
{ double max;
int i;
int n;
for(i=0;i<N;i++);
if(F>0&&max>F);
{max=F;
n=i;
}
cout<<"Maximalnoto polojitelno chislo v masiva e"<<max<<endl;
cout<<"Poredniqt mu nomer e"<<n<<endl;
}
 
void menu()
{
    int izbor;
    do{
        cout<<"1.Vavejdane na razmernost na masiva i negovite stoinosti"<<endl;
        cout<<"2.Izchislqvane na proizvedenieto ot otricatelnite chisla"<<endl;
        cout<<"3.Izchislqvane na sredno aritmetichno ot chislata ,koito se delqt bez ostatuk na 5"<<endl;
        cout<<"4.Izchislqvane na sumata na razlichnite ot nula chislq i broq na nulevite chisla"<<endl;
        cout<<"5.Namirane na maksimalnoto polojitelno chislo i negoviqt poreden nomer"<<endl;
        cout<<"6.Krai na programata"<<endl;
        cin>>izbor;
        while((izbor<1)||(izbor>5))
        switch(izbor)
        {
            case 1:
             cout<<"Vavejdane na chisla:"<<endl;
            input();
 
            case 2:
            cout<<"Proizvedenie ot otricatelnite chisla:"<<endl;
            multiplying();
 
            case 3:
            cout<<"Sredno aritmetichno na chislata koito se delqt bez ostatuk na 5"<<endl;
            average();
 
            case 4:
            cout<<"Sumata na razlichnite ot nula chislq i broq na nulite:"<<endl;
            sum0();
 
            case 5:cout<<"Maksimalnoto polojitelno chislo i negoviq nomer"<<endl;
            maxn();
            case 6: cout<<"Krai na programata"<<endl;
            return;
 
        }
    }while(1);
}
 
void main()
{
menu();
}
Линк към коментара
Сподели в други сайтове

  • 2 седмици по-късно...

Здравейте нов съм в с++ а сега имам да правя курсова работа по ПИК и ми трябва малко помощ.Условието е :Да се реализира програма за управление на сортировъчен автомат. Данните за сортиране да  постъпват от двоичен файл. Обработената информация се записва във текстов файл подредени по колони. Имената на работните файлове се въвеждат от клавиатурата.Моля Помогнете.

Линк към коментара
Сподели в други сайтове

Здравейте :), може ли някои да ми помогне с една задача на C++, ето това е задачата

 

 Публикувано изображение1477438_630526080324257_75677157_n.jpg

 

Нищо сложно няма в задачата. Всеки наясно с условни оператори и цикли би я решил за по-малко от 10 минути. Постарай се, помисли, напиши нещо и пак ела. ;)

Линк към коментара
Сподели в други сайтове

Здравейте :), може ли някои да ми помогне с една задача на C++, ето това е задачата

 

 Публикувано изображение1477438_630526080324257_75677157_n.jpg

 

 

Защо подреждане на програмата и коментари е само 4 точки?!!! Според мен това е не по-малко важно, от която и да е било функционалност описана по-горе.

Линк към коментара
Сподели в други сайтове

Защо подреждане на програмата и коментари е само 4 точки?!!! Според мен това е не по-малко важно, от която и да е било функционалност описана по-горе.

Не и в българската образователна система. То това да беше проблема само...
Линк към коментара
Сподели в други сайтове

Не и в българската образователна система. То това да беше проблема само...

 

Я да ми се аргументирате и дваминцата, че не мога да разбера кое било по-важно и най-вече 'що аджеба да е по-важно... :P

Линк към коментара
Сподели в други сайтове

Я да ми се аргументирате и дваминцата, че не мога да разбера кое било по-важно и най-вече 'що аджеба да е по-важно... :P

Когато се наложи да поддържате чужд код от 500 и повече реда ще разберете защо подреждането на програмата и коментарите са понякога по-важни от вярно написаната програма

Линк към коментара
Сподели в други сайтове

Я да ми се аргументирате и дваминцата, че не мога да разбера кое било по-важно и най-вече 'що аджеба да е по-важно... :P

Приятелю ftpkid, ужасно съм изненадан, че трябва да се аргументирам и то на теб, за нещо толкова очевидно.
Линк към коментара
Сподели в други сайтове

Приятелю ftpkid, ужасно съм изненадан, че трябва да се аргументирам и то на теб, за нещо толкова очевидно.

 

Щото дваминцата(или тримцата) ми се струва, че сравнявате ябълки и портокали. Очевидно е защо в този случай алгоритъмът е по-важен, по-труден е и те зат'ва на ученика му се дават повече точки. Да не говорим, че такива задачи са тип „състезателна информатика“(макар, че точно тази не е), където критериите се въртят главно около ефикасността и бързодействието на алгоритъма, не чак толкова в/у красота на кода и коментари. То за повечето възрастови групи там задачите са под 100 реда, с изключения(за по-малките 4-5-6 клас - често под 20), та в случая има критерии, които са по-важни. А реалния свят е друг филм и тези две неща не подлежат на сравнение, следователно и критиката към образователната система също е излишна. Затова и поисках аргументи, знаейки точно какво си имал предвид, приятелю, flare. Та ябълки и портокали...

Редактирано от ftpkid (преглед на промените)
Линк към коментара
Сподели в други сайтове

То за повечето възрастови групи там задачите са под 100 реда, с изключения(за по-малките 4-5-6 клас - често под 20), та в случая има критерии, които са по-важни. А реалния свят е друг филм и тези две неща не подлежат на сравнение, следователно и критиката към образователната система също е излишна.

Иронията в поста ти е трогателна. Ябълки и портокали...

Хммм, я ми кажи каква е основната идея на образователната система? Да те подготвя за олимпиади и състезания ли? Или за "реалния" живот? Без да броим, че в маса от примерите в учебниците има неща, които тотално принципно грешни. И никъде не пише "това е само за примера, не правете така у дома си".

Иди в папката на сорсовете на линукс ядрото, там в документацията има един текстов файл Coding Style или нещо такова. Чел ли си го? Забавно четиво. Мисля си, че в някой учебник по самоубийствен тероризъм фанатизираните изявления ще са по-малко. Просто пробвай да пратиш патч в ядрото, който не отговаря. И после знам ли, може пък (имайки предвид привързаността ти към него базираните ОС) да повярваш...

И да направя едно далечно, но много точно сравнение. Ти защо слагаш пунктоация и абзаци на това, което пишеш? Защо имаме правило във форума против шльокавицата, след като и без това всеки я разбира?

Е, за мен неподреденият код е далеч по-зле от шльокавица без пунктоация, както веднъж писах... разликата в скоростта, с която чета кода и времето за разбиране е по-тре-са-ва-ща...

Край с офтопика по темата от мен.

Линк към коментара
Сподели в други сайтове

Щото дваминцата(или тримцата) ми се струва, че сравнявате ябълки и портокали. Очевидно е защо в този случай алгоритъмът е по-важен, по-труден е и те зат'ва на ученика му се дават повече точки. Да не говорим, че такива задачи са тип „състезателна информатика“(макар, че точно тази не е), където критериите се въртят главно около ефикасността и бързодействието на алгоритъма, не чак толкова в/у красота на кода и коментари. То за повечето възрастови групи там задачите са под 100 реда, с изключения(за по-малките 4-5-6 клас - често под 20), та в случая има критерии, които са по-важни. А реалния свят е друг филм и тези две неща не подлежат на сравнение, следователно и критиката към образователната система също е излишна. Затова и поисках аргументи, знаейки точно какво си имал предвид, приятелю, flare. Та ябълки и портокали...

 

Разликата между коментиран и подреден код (някои константи и функции липсват, но не това е важното).

 

Без коментари и подреждане:

string hexToString(const string& value){    if(value.length() > (MAX_CHUNKS * CHUNK_SIZE))        return "";        unsigned long long chunks[MAX_CHUNKS] = {0};    unsigned long long chunk_count = getChunks64(chunks, value);        string result;    char buf[BUFF_SIZE] = {0};     unsigned int pointer = 0;    for(unsigned int i = 0; i < chunk_count; i++)    {        buf[0] = (char) ((chunks[i] >> 56) & 0xFF); buf[1] = (char) ((chunks[i] >> 48) & 0xFF);        buf[2] = (char) ((chunks[i] >> 40) & 0xFF); buf[3] = (char) ((chunks[i] >> 32) & 0xFF);        buf[4] = (char) ((chunks[i] >> 24) & 0xFF); buf[5] = (char) ((chunks[i] >> 16) & 0xFF);        buf[6] = (char) ((chunks[i] >> 8) & 0xFF); buf[7] = (char) (chunks[i] & 0xFF);        while(buf[pointer] == 0 && pointer < BUFF_SIZE)            pointer++;                result.append((buf + pointer));        pointer = 0;    }        return result;}

С коментари и подреждане:

/** * Convert each byte (i.e. two consequent characters) from string to ASCII character * @param value Value containing bytes * @return ASCII representation of the bytes */string hexToString(const string& value){    if(value.length() > (MAX_CHUNKS * CHUNK_SIZE))        return "";        // Get junks with CHUNK_SIZE length    unsigned long long chunks[MAX_CHUNKS] = {0}; // Init all elements with zero       unsigned long long chunk_count = getChunks64(chunks, value);        string result;    char buf[BUFF_SIZE] = {0}; // Init all elements with zero. Temporarily store converted ASCII characters.    unsigned int pointer = 0; // Points to the first non zero character in buf    // Perform the conversion from HEX bytes to ASCII characters    for(unsigned int i = 0; i < chunk_count; i++)    {        buf[0] = (char) ((chunks[i] >> 56) & 0xFF); // Get 00000000 00000000 00000000 00000000 00000000 00000000 00000000 11111111        buf[1] = (char) ((chunks[i] >> 48) & 0xFF); // Get 00000000 00000000 00000000 00000000 00000000 00000000 11111111 00000000        buf[2] = (char) ((chunks[i] >> 40) & 0xFF); // Get 00000000 00000000 00000000 00000000 00000000 11111111 00000000 00000000        buf[3] = (char) ((chunks[i] >> 32) & 0xFF); // Get 00000000 00000000 00000000 00000000 11111111 00000000 00000000 00000000        buf[4] = (char) ((chunks[i] >> 24) & 0xFF); // Get 00000000 00000000 00000000 11111111 00000000 00000000 00000000 00000000        buf[5] = (char) ((chunks[i] >> 16) & 0xFF); // Get 00000000 00000000 11111111 00000000 00000000 00000000 00000000 00000000        buf[6] = (char) ((chunks[i] >> 8) & 0xFF);  // Get 00000000 11111111 00000000 00000000 00000000 00000000 00000000 00000000        buf[7] = (char) (chunks[i] & 0xFF);         // Get 11111111 00000000 00000000 00000000 00000000 00000000 00000000 00000000        // Find first non zero character. Used for the last chunk.        while(buf[pointer] == 0 && pointer < BUFF_SIZE)            pointer++;                result.append((buf + pointer));        pointer = 0; // Reset the pointer for the next chunk    }        return result;}
Линк към коментара
Сподели в други сайтове

Без коментари и подреждане:

Това даже е доста подреден код, в сравнение с каквото виждаме по темите.Обаче забележки за "подредения:

Основното правило е не коментирай, ако може да обясниш с код:

Коментари трябва да се правят само за неочевидни неща. Иначе натоварват кода и намаляват четимостта му. Примерно, е абсолютно излишно да коментираш инициализациите. Би имало смисъл, само ако инициализираш с някаква стойност, която не може лесно и логично да се обясни, и то ако името ѝ (защото такива стойности трябва да са define или константи) не го обяснява.

Същото се отнася за вземането на байтовете. Един макрос или функцийка с говорещо име и викана в цикъл за взимане на n-ти байт е 100 пъти по-добре, отколкото 8 реда и коментара и то тези са лоши.

Моето правило е: Пиша коментар, ако реша, че този, който ще ми подържа/променя кода, ще му трябват повече от 1-2 мин. да разбере какво прави даденият фрагмент.

Не го приемай за заяждане, просто нали говорим за "правилни" и "грешни" практики, хубаво е да се уточняват тези неща.

Редактирано от flare (преглед на промените)
Линк към коментара
Сподели в други сайтове

Здравейте на всички.Дадоха ми курсова задача на C++ със следното условие. В едномерен масив да се въведат n стойности,цели числа само 0 или 1.Да се създаде и изведе масив,съдържащ индексите на елементите,които са равни на 1.  Ще съм много благодарен ако някой ми удари едно рамо.Весели Празници и Благодаря предварително. :);)

Линк към коментара
Сподели в други сайтове

  • 3 седмици по-късно...

Добър ден,
Трябва ми помощ със задача по C++. Това е условието.
 

Има точно определен брой числа на квадрат, които могат да се напишат като сборът на две последователни прости числа.
Идва по тази форма (Предишно просто число < Число на квадрат < Следващо просто число)
 
Напишете програма, която намира числата по тази критерия. Ето един пример.
 
Публикувано изображение
 
Също така имам лимит:
Maximum execution time: 1 secondMaximum program size: 10 KB
 
Кодът трябва да излиза от code.in и code.out, но аз използвам cin>> и cout<< заради debugging. Ето го кода ми.
 
#include <iostream>#include <math.h>using namespace std;int i,k,prev,next,nr,numar,fnd=0,divnext=2,divprev=2,div;int main(){    cin>>nr;    for(i=1;i<=100;i++) {        div=2;        // CHECKING IF THE NUMBER IS SQUARE (36, 64, 100 and so on)        if(sqrt(i)==int(sqrt(i))) {            numar=i/2;        }        // -1 for the previous number, +1 for the next number (as in a 10 number radius one is prime)        for(k=2;k<=10;k++) {            prev=numar-k;            next=numar+k;            // Checking if the number is prime            for(div=2;div<=prev/2;div++) {                if(prev%div==0)                    divprev++;            }            // Checking if the number is prime            for(div=2;div<=next/2;div++) {                if(next%div==0)                    divnext++;            }           // If previous prime + next prime equal the square number then decrement the numbers to be found count.            if(prev+next==numar && divprev==2 && divnext==2) {                nr--;                cout<<numar; }            // Resetting divisors count as the 'for' structure starts again.            divnext=2;            divprev=2;            // Stopping the search if we found the number.            if(nr==1)            break;        }    }    return 0;}
 
Проблемът е там, че винаги излиза 12 от 0, а трябва да излиза 36.
Редактирано от Ritte (преглед на промените)
Линк към коментара
Сподели в други сайтове

Нещо твойта програма даже не искаше да се компилира с dev c++ така че си я разписах наново.Не знам как ще се спази лимита от време, като времето за изпълнение зависи и от входните данни,при мене при nr = 1000 времето определено е над 1 секунда.

#include <iostream>using namespace std;int i, nr, f, s, t, t2, pr;int main(){    t = 5;    cin >> nr;    do {        t++;        t2 = t * t;        f=t2/2;        if (f%2==0) f++;        do {            f-=2;            pr = 1;            for (i=3; i<t; i+=2)                if (f%i==0) {                   pr = 0;                   i = t;               }                    } while (pr==0);                s=t2/2;        if (s%2==0) s--;        do {            s+=2;            pr = 1;            for (i=3; i<t; i+=2)                 if (s%i==0) {                    pr = 0;                    i = t;                }                    } while (pr==0 && f+s < t2);                if  (pr && f+s==t2) nr--;            } while (nr);        cout << t2 << endl;    system("pause");}
Редактирано от ined (преглед на промените)
Линк към коментара
Сподели в други сайтове

Благодаря за помощта, inet! Работи както трябва, а аз ще добавя коментарите и ще се опитам да намаля времето по някакъв начин.

Линк към коментара
Сподели в други сайтове

Благодаря за помощта, inet! Работи както трябва, а аз ще добавя коментарите и ще се опитам да намаля времето по някакъв начин.

 

За да не излезеш от определеното време, прилагаш следната тактика. Например зададен ти е лимит от 1000; 

 

Намираш първо простите числа в този интервал. За да не правиш O(N^3) сложност тук ще имаш един масив който ще държи простите числа. Като трябва да проверяваш дали едно число е просто. Минавваш през този масив и ако не е кратно с нито едно число, значи е просто и го слагаш в края на масива. Това е решето на Ератостен.  

След като си генерирал простите числа започваш да итерираш от 2, като на всяка стъпка проверяваш дали текущия индекс повдигнат на 2, сиреч на квадрат дали е по-малко от 1000; Ако е по-малко, минаваш през простите числа и проверяваш дали е сума от две съседни числа. Ако е сума приключваш иначе продължаваш до края на масива с простите числа. 

 

Така сложноста на алгоритъма ще стане: O(N^2 + N). От тук за N <= 1000 програмата ти определено ще приключва за по-малко от секунда. Ако се затрудняваш с реализацията пиши и ще го напиша.

 

EDIT: Виж поста под този. Прав е колегата. 

Редактирано от a.bozhilov (преглед на промените)
Линк към коментара
Сподели в други сайтове

само дето тотално бъркаш размерностите, простите числа до 1000 покриват стойностите само до nr=5, а понеже nr=1000 се получава от сбора на простите числа 550655269 и 550655327,  за да го покриеш ще трябва да намериш всички прости числа до 550655327. Което според мене ще е по-бавно дори по метода на Ератостен отколкото да търсиш само простите числа близо до квадратите, а и ще ти трябва доста голям масив за да ги съхраниш.

Линк към коментара
Сподели в други сайтове

Здравейте имам нужда от голяма помощ ако може да помогнете :) ще ме зарадвате имам следните задачи.

1. Да се напише програма , която чете числа до въвеждане на 0 и определя най-малкото от въведените числа, което изпълнява неравенството: 2>7 - (x-1)

2. Да се напише програма , която определя броя на трицифрените числа , сумата от цифрите на които е равна на n (1<=n<=27) Стойността на n се въвежда от клавиатурата.

3 Да се състави програма , която въвежда от клавиатурата двойки цели числа - a и b до срещане на 0 , които са страни на правоъгълника с най-голямо лице.

4. Кодът за отключване на сейф се получава , като вде 10-цифрени числа се събират цифра по цифра и от сбора им се получава съответната цифра на кода. Ако сборът на две цифри е двуцифрен , цифрите на сбора се събират отново . Да се напише програма , която по въведени две числа отпечатва кода.

Ще съм много благодарен

Линк към коментара
Сподели в други сайтове

Добавете отговор

Можете да публикувате отговор сега и да се регистрирате по-късно. Ако имате регистрация, влезте в профила си за да публикувате от него.

Гост
Напишете отговор в тази тема...

×   Вмъкнахте текст, който съдържа форматиране.   Премахни форматирането на текста

  Разрешени са само 75 емотикони.

×   Съдържанието от линка беше вградено автоматично.   Премахни съдържанието и покажи само линк

×   Съдържанието, което сте написали преди беше възстановено..   Изтрий всичко

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Добави ново...

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите Условия за ползване