19 Şubat 2016 Cuma

A ən böyük və ən kiçik

Üçrəqəmli tam ədəd verilmişdir. Bu ədədin rəqəmlərindən düzəldilmiş ən böyük və ən kiçik ədədlərin fərqinin həmin ədədin özünə hasilini tapın. Məsələn, verilmiş 315 ədədi üçün axtarılan ədəd 315 × (531 – 135) = 124740 olacaq.
Giriş verilənlərinin formatı
Üçrəqəmli tam N ədədi verilir.
Çıxış verilənlərinin formatı
Çıxışa bir ədəd – məsələnin cavabı verilir.


#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int n, a, b, c, k, h;
    cin>>n;
    a=n/100;
    b=(n/10)%10;
    c=n%10;
    if (a<b)
    swap (a, b);
    if (b<c)
    swap (b, c);
    if (a<b)
    swap (a, b);
    k=100*a+10*b+c;
    swap (a, c);
    h=100*a+10*b+c;
    cout<<n*(k-h)<<endl;
 
    return 0;
}

C08 Yerdəyişmə

N natural ədədi və N tam ədəddən ibarət massiv verilmişdir. Onun ilk minimal elemeti ilə sonuncu maksimal elementinin yerini dəyişdirin.
Giriş verilənlərinin formatı
Birinci sətirdə bir N (1 <= N <= 10000) natural ədədi verilir. İkinci sətirdə massivin elementləri – aralarında bir boşluq simvolu olmaqla N sayda tam ədəd verilir.
Çıxış verilənlərinin formatı
Birinci sətirdə N ədədi verilir. İkinci sətirdə yerdəyişmə nəticəsində alınan yeni massiv verilir.


#include <iostream>
#include <algorithm>
using namespace std;
int main ()
{
int a[10000],i;
int n,min,max,imin=0,imax=0;
cin>>n;
for (i=0;i<n;i++)
cin>>a[i];
min=a[0]; max=a[0];
for (i=1;i<n;i++)
{if (a[i]<min)
{min=a[i];
imin=i;}
else
if (a[i]>=max)
{max=a[i];
imax=i;}}
swap (a[imin],a[imax]);
cout<<n<<endl;
for (i=0;i<n-1;i++)
cout<<a[i]<<" ";
cout<<a[n-1]<<endl;
return 0;
}

Ən böyük rəqəm

N natural ədədi verilmişdir. Bu ədədin ən böyük rəqəmini tapın.
Giriş verilənlərinin formatı
Bir sətirdə N (0 < N <= 1018) ədədi verilir.
Çıxış verilənlərinin formatı
Çıxışa bir ədəd – məsələnin həlli verilir.

#include <iostream>
using namespace std;
int main()
{  
    long long n, m;
    cin>>n;
    m=n%10;
    while (n>0)
        
    {
          n/=10;
          if (n%10>m)
          m=n%10;
    }
    cout<<m<<endl;
    return 0;
}

Fibonacci series

#include <iostream>
 
using namespace std;
int main()
{
long int a[10000]={0},b[10000]={0};
int  fa=2, fb=2,i,j,n,m;
cin>>n;
a[0]=1; b[0]=1; m=1;
while(fa<n)
{for(i=0;i<m;i++)
a[i]+=b[i]; fa=fb+1;
for(i=1;i<m;i++)
{ a[i]+=a[i-1]/10;
a[i-1]%=10;}
if (a[m-1]>9)
{
   m++;
   a[m-1]=a[m-2]/10;
   a[m-2]%=10;
}
if(fa<n)
{for(i=0;i<m;i++)
b[i]+=a[i]; fb=fa+1;
 for(i=1;i<m;i++)
{ b[i]+=b[i-1]/10;
b[i-1]%=10;}
if (a[m-1]>9)
{
   m++;
   b[m-1]=b[m-2]/10;
   b[m-2]%=10;
}     }}   
  if(fa==n)        
{for (i=m-1; i>=0; i--)
cout<<a[i];
cout<<endl;}
else
{for (i=m-1; i>=0; i--)
cout<<b[i];
cout<<endl;}
 
return 0;
}

18 Şubat 2016 Perşembe

A52 Robototexnika dərsində

A52 Robototexnika dərsində  (A52 На уроке роботехники) (On the A52 robotics lesson)

Russian
На уроке роботехники Алпай собрал робота. Робот может двигаться по сторонам квадратной сетки и по диагоналям квадрата (узлы сетки имеют целые координаты, а стороны квадрата равны 1). Если робот находится в какой-то точке, то у него имеется 8 направлений движений, то есть в любой точке  у робота  имеется 8 возможных ходов. Вначале робот находится в точке с координатами (x1, y1) и он должен попасть в точку с координатами (x2, y2). Определите наименьшее количество шагов за которое робот сможет попасть в точку назначения.
Входные данные
В первой строке находится пара целых чисел x1, y1 (-109 ≤  x1, y1 ≤ 109) – исходное положение робота.
Во второй строке находится пара целых чисел x2, y2 (-109 ≤ x2, y2 ≤ 109) – конечное положение робота.
Выходные данные
Выведите целое число – наименьшее количество ходов, необходимое роботу, чтобы попасть в точку назначения.
Azerbaijan
Alpay ropototexnika dərsində robot yığdı. Robot kvadratlardan ibarət torun tərəfləri və diaqonalları boyunca hərəkət edə bilir (torun bəndlərinin – düyünlərinin koordinatları tam ədədlərdir, torun hər bir kvadratının tərəfi isə 1-ə bərabərdir). Robot hər hansı nöqtədən 8 istiqamətə hərəkət edə bilər, yəni istənilən nöqtədə robotun 8 mümkün gedişi var. Başlanğıcda robot (x1, y1) koordinatlı nöqtədədir və (x2, y2) koordinatlı nöqtəyə getməlidir. Robotun təyinat nöqtəsinə çatması üçün atacağı addımların minimal sayını müəyyənləşdirin.
Giriş verilənlərinin formatı
Birinci sətirdə aralarında boşluq simvolu olmaqla iki tam x1, y1 (-109 ≤  x1, y1 ≤ 109) ədədləri – robotun başlanğıc mövqeyi verilir.
İkinci sətirdə aralarında boşluq simvolu olmaqla iki tam x2, y2 (-109 ≤ x2, y2 ≤ 109) ədədləri – robotun son mövqeyi verilir.
Çıxış verilənlərinin formatı
Çıxışa bir tam ədəd – robotun təyinat nöqtəsinə çatması üçün atacağı addımların minimal sayı verilir.
(ПРИМЕР) (Nümunə)
Пример входных данных
2 1
5 2

1 2 5 1
Пример выхо
3


                      #include<iostream>
using namespace std;
int main ()
{
int d1,d2,x1,y1,x2,y2;
cin>>x1>>y1>>x2>>y2;
d1=x1-x2;
d2=y1-y2;
if(d1<0) d1=-d1;
if(d2<0) d2=-d2;
if(d1>d2) cout<<d1<<endl;
else cout<<d2<<endl;
return 0;
}
                                    

17 Şubat 2016 Çarşamba

A19 Sadə məsələ - tam ədədlər

A19 Sadə məsələ - tam ədədlər

(Azərbaycan)Beşrəqəmli ədəd verilib. Bu ədədin ilk iki rəqəminin cəmi ilə son iki rəqəminin cəminin fərqini hesablayın.
(Russian) Дано пятизначное число. Вычислить разность между суммами первых двух и последних двух цифр этого числа.
(English)Given a five-digit number. Calculate the difference between the sum of the first two and the last two digits of this number .
Nümunə  (Пример) (Example)
Пример входных данных
12345
99999
98765
Пример выходных данных
-6
0
6
Giriş verilənlərinə nümunə
12345
99999
98765
Çıxış verilənlərinə nümunə
-6
0
6

Example input
12345
99999
98765
Example output
-6
0
6
#include <iostream>
using namespace std;
int main()
{
    int a,b,d,e,s;
    
    
  long n;
  cin>>n;
a=n%10;
b=(n/10)%10;
  
d=(n/1000)%10;
e=(n/10000)%10;
s=(d+e)-(a+b);
cout<<s<<endl;    
      
   
    return 0;
}
                  
 
                                    

C14 Massivin bir mövqe sola sürüşdürülməsi

C14 Massivin bir mövqe sola sürüşdürülməsi

N natural ədədi və N tam ədəddən ibarət massiv verilmişdir. Onun elemntlərini dövri olaraq bir mövqe sola sürüşdürün (birinci element sonuncu element olur).
Giriş verilənlərinin formatı
Birinci sətirdə bir N (1 <= N <= 10000) natural ədədi verilir. İkinci sətirdə massivin elementləri – aralarında bir boşluq simvolu olmaqla N sayda tam ədəd verilir.
Çıxış verilənlərinin formatı
Birinci sətirdə N ədədi verilir. İkinci sətirdə sürüşdürmə nəticəsində alınan yeni massiv verilir.


Giriş verilənlərinə nümunə
10
0 1 2 3 4 5 6 7 8 9
Çıxış verilənlərinə nümunə
10
1 2 3 4 5 6 7 8 9 0
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n,i,a[10001],min,max;
cin>>n;
for(i=0;i<n;i++)
cin>>a[i];
cout<<n<<endl;
;
for(i=1;i<n;i++)
cout<<a[i]<<" ";
cout<<a[0]<<endl;
return 0;
}

16 Şubat 2016 Salı

Seqmentlərin sayı


B30 Kalkulyatorda seqmentlərin sayı
Bir gün Alpay babasının sandığında elektron kalkulyator tapdı. Kalkulyatorda rəqəmlər yeddi-seqmentli indikatorlar vasitəsilə göstərilir. Məsələn, 0 rəqəmini göstərmək üçün 6 seqment, 7 rəqəmini göstərmək üçün 3 seqment işıqlanır (qara olur).
Alpay hər hansı ab tam ədədlərinin özləri də daxil olmaqla onların arasında yerləşən bütün ədədləri növbə ilə kalkulyatorda yığmağa başladı. Hər bir ədədi yığdıqdan sonra Alpay əmələ gələn seqmentləri sayırdı və yenidən başlatma (Reset) düyməsini basırdı. Sonra isə o, bütün bu ədədləri yığan zaman kalkulyatorda əks olunan seqmentlərin ümumi sayını hesablayan proqram yazmaq qərarına gəldi. Bu işi görməkdə Alpaya kömək edin.
Məsələn, əgər a = 1 və b = 3 olarsa, onda kalkulyatorda öncə 2 seqment, sonra 5 seqment və yenə də 5 seqment əks olunacaq. Beləliklə, əks olunan seqmentlərin ümumi sayı 12 olacaq.
Giriş verilənlərinin formatı
Bir sətirdə aralarında boşluq simvolu olmaqla iki tam a, b (1 ≤ a , b ≤ 106) ədədləri verilir.
Çıxış verilənlərinin formatı
Çıxışa bir tam ədəd – əks olunan seqmentlərin ümumi sayı verilir.





Hərflər üzrə tullanma (RIO_M2014)

Hərflər üzrə tullanma (RIO_M2014)

Məsələ #: 183   

Latın əlifbasının baş hərflərindən təşkil olunmuş N sayda simvollar zənciri verilmişdir. Ən çoxuK simvol tullanmaqla zəncirin birinci simvolundan axırıncı simvolunadək getmək lazımdır. Tullanma nəticəsində simvol dəyişmirsə, yəni əvvəlki ilə eyni olan hərfin üzərinə tullanılırsa, belə tullanmanın qiyməti 0-a, başqa simvolun üzərinə tullanılırsa, qiyməti 1-ə bərabər olur.
Birinci simvoldan axırıncı simvola çatmaq üçün qiyməti ən az olan keçidi hesablayan proqram yazın.
Giriş verilənlərinin formatı
Birinci sətirində iki tam ədəd verilir: simvollar zəncirinin uzunluğu – (2 ≤ N ≤ 105) və maksimal tullanma uzunluğu – (1 ≤ K N). İkinci sətirdə N sayda hərfdən ibarət zəncir yerləşir.
Çıxış verilənlərinin formatı
Çıxışa bir ədəd – yerdəyişmənin minimum qiyməti verilir.

 Məlumat
Zaman limiti: 2 san.
Yaddaş limiti: 64 Mb
Bal: 10
Çətinlik: 31/95 (67 %)
Nümunə
Giriş verilənlərinə nümunə
10 2
ABABBCACBC
Çıxış verilənlərinə nümunə
2
#include <iostream>
#include <stdio.h>
using namespace std;
int main ()
{
int n,k;
char s[100001], c;
int M[100000], km1 , km2, i, j;
scanf ("%d%d", &n, &k);
scanf ("%s" , s);
M[n-1] = 0;
for (i = n-2; i>= n- k - 1; i--)
if (s[i] != s[n-1])
M[i]=1;
else
M[i]=0;
for (i = n-k-2; i>= 0; i--)
{
c=s[i];
km1 = km2 = n;
for(j = i+1; j<i+k;j++)
if (c != s[j])
{
if (M[j]<km1) km1=M[j];
}
else
{
if (M[j]<km2) km2=M[j];
}
if (km2<km1 +1)
M[i] = km2;
else
M[i] = km1 + 1;
}
printf("%d\n",M[0]);
return 0;
}