Регистрация не е нужна, освен при създаване на тема в "Задача на седмицата".

C++

C++

Мнениеот Гост » 21 Дек 2018, 10:17

...
Прикачени файлове
5F76929D-BED3-4D8B-8231-3970FB873A86.jpeg
5F76929D-BED3-4D8B-8231-3970FB873A86.jpeg (209.11 KiB) Прегледано 678 пъти
Гост
 

Re: C++

Мнениеот Добромир Глухаров » 21 Дек 2018, 19:33

Код: Избери целия код
#include <iostream>

using namespace std;

bool F(int Arr[],int L,int M)
{
    bool Ans;
    if(M<=-L||M>=L)
        Ans=false;
    else
    {
        int i,T;
        T=Arr[0];i=0;
        do
        {
            Arr[i]=Arr[(L+i-M)%L];
            i=(L+i-M)%L;
        }
        while(i!=0);
        Arr[(L+M)%L]=T;
        Ans=true;
    }
    return Ans;
}

int main()
{
    int L,M;
    do
        {cout<<"L(2..100)=";cin>>L;}
    while(L<2||L>100);
    cout<<"M=";cin>>M;
    int* Arr=new int[L];
    for(int i=0;i<L;i++)
    {
        cout<<"Arr["<<i<<"]=";
        cin>>Arr[i];
    }
    cout<<endl;
    if(F(Arr,L,M))
        for(int i=0;i<L;i++)
            cout<<"Arr["<<i<<"]="<<Arr[i]<<endl;
    else
        cout<<"Error!"<<endl;
    cout<<endl;
    delete Arr;
    return 0;
}
Аватар
Добромир Глухаров
Математик
 
Мнения: 2080
Регистриран на: 11 Яну 2010, 13:23
Рейтинг: 2178

Re: C++

Мнениеот Добромир Глухаров » 22 Дек 2018, 12:53

За съжаление горната пограма върши работа само когато числата M и L са взаимно прости (какъвто е случаят с дадените примери). Когато обаче (M,L)>1, се налага във функцията да се създава временно втори масив, в който да се прехвърлят числата. (Този алгоритъм е универсален.)

Код: Избери целия код
#include <iostream>

using namespace std;

bool F(int Arr[],int L,int M)
{
    bool Ans;
    if(M<=-L||M>=L)
        Ans=false;
    else
    {
        int i,*InnerArr=new int[L];
        for(i=0;i<L;i++)
            InnerArr[(L+i+M)%L]=Arr[i];
        for(i=0;i<L;i++)
            Arr[i]=InnerArr[i];
        delete[] InnerArr;
        Ans=true;
    }
    return Ans;
}

int main()
{
    int L,M;
    do
        {cout<<"L(2..100)=";cin>>L;}
    while(L<2||L>100);
    cout<<"M=";cin>>M;
    int* Arr=new int[L];
    for(int i=0;i<L;i++)
    {
        cout<<"Arr["<<i<<"]=";
        cin>>Arr[i];
    }
    cout<<endl;
    if(F(Arr,L,M))
        for(int i=0;i<L;i++)
            cout<<"Arr["<<i<<"]="<<Arr[i]<<endl;
    else
        cout<<"Error!"<<endl;
    cout<<endl;
    delete[] Arr;
    return 0;
}
Аватар
Добромир Глухаров
Математик
 
Мнения: 2080
Регистриран на: 11 Яну 2010, 13:23
Рейтинг: 2178


Назад към C, C++



Кой е на линия

Регистрирани потребители: Google [Bot]

Форум за математика(архив)