Pagini recente » Cod sursa (job #1821903) | Cod sursa (job #1481161) | Cod sursa (job #36674) | Cod sursa (job #1399191) | Cod sursa (job #1274172)
/*#include <fstream>
using namespace std;
ifstream fin("permutari.in");
ofstream fout("permutari.out");
int v[10], i, j, k, ok, n;
void solutie(int n){
for(int i = 1; i <= n; i ++)
fout << v[i] << " ";
fout << "\n";
return;
}
int conditie(int k){
for(int i = 1; i < k; i ++)
if(v[i] == v[k])
return 0;
return 1;
}
void backtracking(int k){
if(k == n + 1)
solutie(n);
else{
for(int i = 1; i <= n; i ++){
v[k] = i;
if(conditie(k))
backtracking(k + 1);
}
}
return;
}
int main(){
fin >> n;
backtracking(1);
return 0;
}*/
#include <fstream>
#include <iostream>
#include <algorithm>
using namespace std;
//=======================*
ifstream fin("dame.in");
ofstream fout("dame.out");
//=======================*
int n, m, i, j, k, ok, minim, maxim;
int v[1000001], w[1000001], ii, jj, i1;
int a[1001][1001], b[1001][1001], iv, jv;
int x, y, z, t, nr, aux;
//=======================*
int main(){
fin>> n;
//Avem 2 cazuri:
if(n <= 3){//Cazul cand algoritmul numerge (n <= 3)
if(n == 1 || n == 2){//Cazul cand n == 1 || n == 2
fout<< 1 <<"\n"<< 1 <<" "<< 1 <<"\n";
}
else{//Cazul cand n == 3
fout<< 2 <<"\n"<< 1 <<" "<< 1 <<"\n"<< 2 <<" "<< 3 <<"\n";
}
}
else{//Cazul cand algoritmul merge (n > 3)
fout<< n <<"\n";//Numarul reginelor e n (avem n linii)
x = 2;
for(i = 1; i <= n / 2; i ++){//Notam pozitiile in vectorul v
v[i] = x;//Mai intai notam numerele pare
x += 2;
}//Ca in exemplu
if(n % 12 == 9 || n % 12 == 3){//Si verificam cazul cand
for(i = 2; i <= n / 2; i ++){//n se imparte la 3 , 9
v[i-1] = v[i];
}
v[n/2] = 2;
}
x = 1;//
for(i = n / 2 + 1; i <= n; i ++){//Notam pozitiile in vectorul v
v[i] = x;//Dupa pe cele impare
x += 2;
}
if(n % 12 == 8){//Verificam cazul cand se imparte la 8
for(i = n / 2 + 1; i <= n / 2 + n / 4; i ++){
aux = v[i * 2 - n / 2 - 1];
v[i * 2 - n / 2 - 1] = v[i * 2 - n / 2];
v[i * 2 - n / 2] = aux;
}//interschimbam v[i * 2 - n / 2 - 1] cu v[i * 2 - n / 2
}
if(n % 12 == 2){//Verificam cazul cand se imparte la 2
v[n / 2 + 1] = 3;
v[n / 2 + 2] = 1;
for(i = n / 2 + 4; i <= n; i ++){
v[i - 1] = v[i];
}
v[n] = 5;
}
if(n % 12 == 3 || n % 12== 9){//Verificam cazul cand n se
for(i = n / 2 + 3; i <= n; i ++){//imparte la 3 , 9
v[i - 2] = v[i];
}
v[n - 1] = 1;
v[n] = 3;
}
for(i = 1; i <= n; i++){//Afisare
fout<< i << " " << v[i] << "\n";
}
}
return 0;
}