Kami mempunyai N nombor asli yang pertama. Tugas kami adalah untuk mendapatkan permutasi mereka di mana perbezaan mutlak antara setiap dua elemen berturut-turut ialah > 1. Jika tiada susunan sedemikian wujud, -1 dikembalikan.
Caranya sangat mudah. Kami akan menggunakan kaedah tamak. Kami mengisih semua nombor ganjil dalam tertib menaik atau menurun dan kemudian semua nombor genap dalam tertib menurun atau menaik
Begin if N is 1, then return 1 if N is 2 or 3, then return -1 as no such permutation is not present even_max and odd_max is set as max even and odd number less or equal to n arrange all odd numbers in descending order arrange all even numbers in descending order End
#include <iostream> using namespace std; void arrangeN(int N) { if (N == 1) { //if N is 1, only that will be placed cout << "1"; return; } if (N == 2 || N == 3) { //for N = 2 and 3, no such permutation is available cout << "-1"; return; } int even_max = -1, odd_max = -1; //find max even and odd which are less than or equal to N if (N % 2 == 0) { even_max = N; odd_max = N - 1; } else { odd_max = N; even_max = N - 1; } while (odd_max >= 1) { //print all odd numbers in decreasing order cout << odd_max << " "; odd_max -= 2; } while (even_max >= 2) { //print all even numbers in decreasing order cout << even_max << " "; even_max -= 2; } } int main() { int N = 8; arrangeN(N); }
Atas ialah kandungan terperinci Susun N nombor asli yang pertama supaya perbezaan mutlak antara unsur bersebelahan lebih besar daripada 1. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!