Răspuns :
Răspuns:
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("sir4.in");
ofstream fout("sir4.out");
int k, i, num, a[100], fr[100],m, stop;
int main()
{
fin >> k;
num=k*k;
num=num%1000;
a[1]=(num/100)*10+(num/10)%10;
i=1; stop=0;
while (!stop)
{
fr[a[i]]=1;
num=a[i]*a[i]%1000;
m=(num/100)*10+(num/10)%10;
if (fr[m]==0) { ++i; a[i]=m;}
else { stop=1; m=i;}
}
for (i=1; i<=m; ++i)
fout << a[i] << " ";
fout << endl;
if (fr[0]==1) fout << 0 << " ";
for (i=1; i<10; ++i)
{
if (fr[i]==1)
{
fout << i << " ";
for (int j=i*10; j<=i*10+9; ++j)
{
if (fr[j]==1) { fout << j << " "; fr[j]=0;}
}
}
else
{
for (int j=i*10; j<=i*10+9; ++j)
{
if (fr[j]==1) { fout << j << " "; fr[j]=0;}
}
}
}
}
Explicație:
pentru a evita repetarea folosesc un vector caracteristic unde pun 1 la apariţia unui nou element in vector. otodată ân vectorul a punem termenii curenţi ai şirului generat în ordinea lor de apariţie (asta e necesar pentru punctul a), iar pentru punctul b) avem nevoie să scriem în fişier şirul ordonat după primele cifre. Aici e benefic vectorul caracteristic fr[ ]
Dacă apar ântrebări, răspundem... Succese! Parcă s-au terminat orele, adică s-a finisat anul şcolar? sau nu?
Vă mulțumim pentru vizita pe site-ul nostru dedicat Informatică. Sperăm că informațiile oferite v-au fost de ajutor. Nu ezitați să ne contactați pentru orice întrebare sau dacă aveți nevoie de asistență suplimentară. Vă așteptăm cu drag data viitoare și nu uitați să ne adăugați la favorite!