Sesiunea speciala
Subiecte sesiunea speciala Bac 2016
Rezolvare sesiunea speciala Bac 2016
Subiectul I
1. a
2.
a) 3
b) 18
c) citeste n
(numar natural nenul)
k<-1
m<-1
- daca n>9 atunci
| -repeta
| | - daca n%10=[n/10]%10 atunci
| | | k<-k+1
| | | -daca k>m atunci
| | | | m<-k
| | | |_
| | |
| | | altfel
| | | k<-1
| | |_
| |
| | n<[n/10]
| | pana cand n<10
| |_
|
|_
scrie m
d)
#include <iostream>
using namespace std;
int main()
{
cout << "Hello world!" << endl;
int n,k,m;
cin>>n;
k=1;
m=1;
while(n>9)
{
if(n%10==n/10%10)
{
k=k+1;
if(k>m)
m=k;
}
else
k=1;
n=n/10;
}
cout<<m;
return 0;
}
Subiectul II
1. d
2. a
3. 2, 3, 1, 7
4.
s=0;
for(i=0;i<20;i++)
s=s+p[i].pretOra*p[i].nrLocuriInchiriate;
5.
Metoda 1
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
cout << "Hello world!" << endl;
int n,k,i;
char b[440]="";
cout<<"n=";cin>>n;
struct cuvinte
{
char cuvant[21];
}a[20];
for(i=0;i<n;i++)
{
cout<<"Introduceti cuvantul "<<i+1<<": ";
cin>>a[i].cuvant;
cin.get();
}
cout<<"k=";cin>>k;
for(i=0;i<n;i++)
if(strlen(a[i].cuvant)==k)
{
strcat(b,a[i].cuvant);
strcat(b," ");
}
for(i=0;i<n;i++)
if(strlen(a[i].cuvant)!=k)
{
strcat(b,a[i].cuvant);
strcat(b," ");
}
cout<<b;
return 0;
}
Metoda 2
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
struct cuv
{
char s[20];
int lung;
} cit[20];
char sir[400]="",man[400]="";
int n,k;
cin >>n;
for(int i=1;i<=n;i++)
{
cin>>cit[i].s;
cit[i].lung=strlen(cit[i].s);
}
cin>>k;
for(int i=1;i<=n;i++)
{
if(cit[i].lung==k)
{
strcat(sir,cit[i].s);
strcat(sir," ");
}
else
{
strcat(man,cit[i].s);
strcat(man," ");
}
}
strcat(sir,man);
cout << sir << endl;
return 0;
}
Subiectul III
1. b
2. 010011
010100
3.
#include <iostream>
using namespace std;
int prim(int n)
{
int i,s=0;
for(i=1;i<=n;i++)
if(n%i==0)
s++;
if(s==2)
return 1;
else
return 0;
}
/*Functia "prim" alternativa:
unsigned int prim(unsigned int n)
{
if(n<2) //inutil din moment ce in enunt se specifica ca n∈[2,109]
return 0;
if(n==2)
return 1;
if(n%2==0) // se poate inlocui cu operatiile pe biti if(n&1==0)
return 0;
unsigned int i;
for(i=3;i*i<=n;i=i+2)
if(n%i==0)
return 0;
return 1;
}
*/
void pr(int n, int b[100000])
{
int i;
for(i=2;i<=n;i++)
if(n%i==0&&prim(i))
b[i]=1;
}
int minDivPrim(int n)
{
if(prim(n))
return n;
int b[100000]={0},a[100000]={0},j=2,t=0,i,p;
pr(n,b);
while(t==0)
{
pr(j,a);
p=1;
for(i=0;i<n;i++)
if(a[i]!=b[i])
p=0;
if(p==1)
t=1;
else
{j++;
for(p=0;p<n;p++)
a[p]=0;
}
}
return j;
}
int main()
{
cout << "Hello world!" << endl;
int n;
cout<<"n=";cin>>n;
cout<<minDivPrim(n);
return 0;
}
4.
b)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
int main()
{
cout << "Hello world!" << endl;
ofstream f("bac.out");
int i,n,t;
cout<<"n=";cin>>n;
for(i=n;i>=1;i--)
{
t=(i+1)/2*pow(-1,i+1);
f<<t<<" ";
}
f.close();
return 0;
}
a)
Programul se bazeaza pe observatia ca termenul "al x-lea" din sirul nostru se calculeaza dupa formula (x+1)/2*pow(-1,x+1). Acest lucru se deduce usor dupa ce scriem cativa termeni ai sirului calculati dupa formula din enuntul problemei. Programul este eficient deoarece: este liniar, nu foloseste un tablou pentru memorarea termenilor sirului, este de tipul O(n).