Professional Documents
Culture Documents
Задачи Условен алгоритъм
Задачи Условен алгоритъм
Решение:
1
2 #include<iostream>
using namespace std;
3 int main()
4 {
5 double a;
6 cin>>a;
if(a<0)cout<<-a<<endl;
7 else cout<<a<<endl;
8 return 0;
9 }
10
Задача 5. За да се реши задачата, трябва да проверим дали символът е цифра. Тъй като всички цифри са с последователни ASCII кодове,
то можем да проверим дали цифрата се намира в интервала от символа ‘0’ до символа ‘9’.
Решение:
1
2 #include<iostream>
using namespace std;
3 int main()
4 {
5 char s;
6 cin>>s;
if(s>=’0’&&s<=’9’) cout<<”Yes”<<endl;
7
else cout<<”No”<<endl;
8 return 0;
9 }
10
Задача 6. Цифрите на въведеното число се отделят и се събират. Прави се проверка дали получената сума е четно число.
Съществува възможност въвеждането на числото да се реализира, като всяка цифра се въвежда поотделно в символна променлива, след
което тази променлива се обработва.
Задача 8. За решението на задачата е необходимо да се извърши проверка за едновременното равенство на първата с последната и втората
с третата цифри.
Решение:
1
2 #include<iostream>
3 using namespace std;
int main()
4 {
5 unsigned int ch;
6 cin>>ch;
7 if((ch%10==ch/1000)&&(ch/10%10==ch/100%10))
cout<<”Yes”<<endl;
8
else
9 cout<<”No”<<endl;
10 return 0;
11 }
12
Задача 9. Решение:
1
2 #include<iostream>
#include<cmath>
3 using namespace std;
4 int main()
5 {
6 double x;
7 cin>>x;
if(x>=20)cout<<”y=”<<(2*pow(x,4)+3)<<endl;
8 else cout<<”y=”<<fabs(x-1)<<endl;
9 return 0;
10 }
11
Задача 10. Решение:
1 #include<iostream>
#include<cmath>
2 using namespace std;
3 int main()
4 {
5 double x;
6 cin>>x;
if(x<-4) cout<<”y=”<<(2*x+1)<<endl;
7 else
8 if(x<=5) cout<<”y=”<<sqrt(x*x+3)<<endl;
9 else cout<<”y=”<<x/(2*x+1);
10 return 0;
11
12 }
13
Задача 11. Решение:
1
2 #include<iostream>
3 using namespace std;
4 int main()
5 {
double x,y,max,min;
6 cin>>x>>y;
7 max=x;
8 min=y;
9 if(x<y)
10 {
max=y;
11 min=x;
12 }
13 if(x<0)cout<<max<<endl;
14 else cout<<min<<endl;
return 0;
15
}
16
17
Задача 12. В решението на задачата трите цифри се отделят в различни променливи. Кратността на всяка цифра се проверява в разширено
логическо условие.
Решение 1:
1
2 #include<iostream>
3 using namespace std;
4 int main()
{
5 int n,c1,c2,c3;
6 cin>>n;
7 c1=n/100;
8 c2=n/10%10;
c3=n%10;
9
if(n%c1==0&&n%c2==0&&n%c3==0)
10 cout<<”Yes ”<<c1+c2+c3<<endl;
11 else cout<<”No ”<<c1*c2*c3<<endl;
12 return 0;
13 }
14
Задачата може да се реши и по втори начин. Всяка цифра се отделя в сложното булево условие на оператор if. При такова условие, в
случай че първата част не е вярна, останалите части на условието не се проверяват. По този начин се повишава бързодействието на
алгоритъма.
Решение 2:
1
2 #include<iostream>
3 using namespace std;
int main()
4 {
5 int n;
6 cin>>n;
7 if(n%(n%10)==0&& n%(n/10%10)==0&& n%(n/100)==0)
cout<<”Yes ”<<(n%10+n/10%10+n/100)<<endl;
8
else
9 cout<<”No ”<<((n%10)*(n/10%10)*(n/100))<<endl;
10 return 0;
11 }
12
Задача 13. При тази задача е удобно цифрите на числото да се съхранят в отделни променливи поради двукратната им употреба.
Решение:
1 #include<iostream>
using namespace std;
2
int main()
3 {
4
5
int n,k,c1,c2,c3;
6 cin>>n>>k;
7 c1=n%10;
8 c2=n/10%10;
9 c3=n/100;
10 if((c1+c2+c3)%k==0)cout<<”Yes ”<<c1<<c2<<c3<<endl;
else cout<<”No ”<<(c1+c2+c3)*k<<endl;
11 return 0;
12 }
13
Задача 14. Решение:
1
2 #include<iostream>
3 using namespace std;
int main()
4 {
5 int n,c1,c2,c3;
6 cin>>n;
7 c1=n%10;
8 c2=n/10%10;
c3=n/100;
9 if((c1+c2+c3)>=10) cout<<”Yes ”<<(c1+c2+c3)<<endl;
10 else cout<<”No ”<<(c1*c2*c3)<<endl;
11 return 0;
12 }
13
Задача 15. Решение:
1
2 #include<iostream>
3 using namespace std;
int main()
4 {
5 int n,c1,c2,c3,k;
6 cin>>n>>k;
7 c1=n%10;
8 c2=n/10%10;
c3=n/100;
9 if((c1*c2*c3)>k) cout<<”Yes ”<<(c1*c2*c3)+k<<endl;
10 else cout<<”No ”<<k-(c1*c2*c3)<<endl;
11 return 0;
12 }
13
Задача 16. Решение:
1
2 #include<iostream>
3 using namespace std;
4 int main()
{
5 int n,m,c1,c2,c3;
6 cin>>n>>m;
7 c1=n/100+m%10;
8 c2=n/10%10+m/10%10;
9 c3=n%10+m/100;
if(c1>9) c1=c1/10+c1%10;
10 if(c2>9) c2=c2/10+c2%10;
11 if(c3>9) c3=c3/10+c3%10;
12 cout<<c1<<c2<<c3<<endl;
13 return 0;
}
14
15
Задача 17. За да съществува триъгълник с дадените три страни, е необходимо страните му да са положителни числа и сборът на всеки две
от тях да е по-голям от третата страна. Всъщност второто условие – сборът на всеки две страни да е по-голям от третата страна, изключва
необходимостта от задаване на другото условие. Защо?Направете математически анализ.
Решение:
1 #include<iostream>
#include<cmath>
2 using namespace std;
3
4
5 int main()
6 {
double a,b,c,p;
7 cin>>a>>b>>c;
8 if(a>=b+c||b>=a+c||c>=a+b)
9 cout<<”не съществува”<<endl;
10 else
11 {
p=(a+b+c)/2;
12 cout<<sqrt(p*(p-a)*(p-b)*(p-c))<<endl;
13 }
14 return 0;
15 }
16
Задача 18. Задачата е аналогична на предходната с изключение на това, че се изискват допълнителни проверки за равенства между
страните.
Решение:
1
2
3 #include<iostream>
#include<cmath>
4 using namespace std;
5 int main()
6 {
7 double a,b,c,p;
8 cin>>a>>b>>c;
if(a>=b+c||b>=a+c||c>=a+b)
9 cout<<”не съществува”<<endl;
10 else
11 {
12 cout<<”съществува”<<endl;
if(a==b&&a==c&&b==c)
13 cout<<”равностранен”<<endl;
14 else
15 if(a==b||a==c||b==c)
16 cout<<”равнобедрен”<<endl;
17 else
cout<<”разностранен”<<endl;
18 }
19 return 0;
20 }
21
22
Задача 19. Решение:
1
2 #include<iostream>
3 using namespace std;
4 int main()
{
5 int n,c1,c2,c3;
6 cin>>n;
7 c1=n%10;
8 c2=n/10%10;
9 c3=n/100;
if((c1*c2*c3)>99)
10 cout<<”yes ”<<((c1*c2*c3)-(c1+c2+c3))<<endl;
11 else
12 cout<<”no ”<<(c1*c2*c3)<<endl;
13 return 0;
}
14
15
Задача 20. Решение:
1 #include<iostream>
using namespace std;
2 int main()
3 {
4 int n,c1,c2,c3;
5
6 cin>>n;
7 c1=n%10;
8 c2=n/10%10;
9 c3=n/100;
if(c1!=c2&&c2!=c3&&c1!=c3)
10 cout<<”yes ”<<(c1*c3)<<endl;
11 else
12 cout<<”no ”<<c1<<c2<<c3<<endl;
13 return 0;
}
14
15
Задача 21.
Решение 1:
1
2
3 #include<iostream>
4 using namespace std;
int main()
5 {
6 long int n1,n2,n3,min=2147483647,max=-2147483648;
7 cin>>n1>>n2>>n3;
8 // Намиране на min
9 if(n1%2!=0&&min>n1) min=n1;
if(n2%2!=0&&min>n2) min=n2;
10 if(n3%2!=0&&min>n3) min=n3;
11 // Намиране на max
12 if(n1%2==0&&max<n1) max=n1;
13 if(n2%2==0&&max<n2) max=n2;
if(n3%2==0&&max<n3) max=n3;
14
// Проверка дали всичките числа са нечетни
15 if(n1%2!=0&&n2%2!=0&&n3%2!=0) cout<<min<<endl;
16 else
17 // Проверка дали всичките числа са четни
18 if(n1%2==0&&n2%2==0&&n3%2==0) cout<<max<<endl;
else
19 // Остава числата да са и четни, и нечетни
20 cout<<max-min<<endl;
21 return 0;
22 }
23
24
При операцията остатък от целочислено деление полученият резултат носи знака на делимото. Ако делим положително число, остатъкът
също е положителен, а при отрицателните – отрицателен. В следващото решение условията за нечетно число илюстрират това.
Решение 2:
1 #include<iostream>
using namespace std;
2 int main()
3 {
4 long int n1,n2,n3,min=2147483647,max=-2147483648;
5 cin>>n1>>n2>>n3;
6 // Намиране на min
if((n1%2==1||n1%2==-1)&&min>n1) min=n1;
7 if((n2%2==1||n2%2==-1)&&min>n2) min=n2;
8 if((n3%2==1||n3%2==-1)&&min>n3) min=n3;
9 // Намиране на max
10 if(n1%2==0&&max<n1) max=n1;
11 if(n2%2==0&&max<n2) max=n2;
if(n3%2==0&&max<n3) max=n3;
12 // Проверка дали всичките числа са нечетни
13 if((n1%2==1||n1%2==-1)&&(n2%2==1||n2%2==-1)&&(n3%2==1||
14 n3%2==-1))
15 cout<<min<<endl;
else
16 // Проверка дали всичките числа са четни
17
18
19 if(n1%2==0&&n2%2==0&&n3%2==0)
20 cout<<max<<endl;
21 else
22 // Остава числата да са и четни, и нечетни
23 cout<<max-min<<endl;
return 0;
24 }
25
26