Rumah > pembangunan bahagian belakang > C++ > Program C untuk mencetak kedudukan aksara yang disusun supaya ia menjadi palindrom

Program C untuk mencetak kedudukan aksara yang disusun supaya ia menjadi palindrom

PHPz
Lepaskan: 2023-09-03 11:25:13
ke hadapan
597 orang telah melayarinya

Program C untuk mencetak kedudukan aksara yang disusun supaya ia menjadi palindrom

memberi anda rentetan rentetan panjang n. Cetak kedudukan setiap elemen dalam rentetan supaya ia boleh membentuk palindrom, jika tidak, cetak mesej "Tiada palindrom" ke skrin.

Apakah itu palindrom?

Palindrome ialah perkataan yang urutan aksaranya dibaca dari arah belakang atau belakang adalah sama dengan urutan aksara yang dibaca dari arah hadapan, cth MADAM, kereta lumba.

Untuk mencari sama ada urutan atau perkataan adalah palindrom, kita biasanya menyimpan terbalik perkataan itu dalam rentetan yang berasingan dan membandingkan kedua-duanya, jika ia adalah sama, maka perkataan atau urutan yang diberikan ialah palindrom. Tetapi dalam masalah ini kita perlu mencetak pilih atur untuk membentuk perkataan atau urutan dalam palindrom.

Seperti, terdapat rentetan str = "tinni" maka ia boleh menjadi intni atau nitin jadi kita perlu kembali sebagai indeks bermula dari 1 dan susunan pilihatur hasilnya boleh menjadi 2 3 1 4 5 atau 3 2 1 5 4 satu daripada dua.

Masalah di atas memerlukan penyelesaian seperti contoh yang diberikan di bawah -

Contoh

Input: string str = “baa”
Output: 2 1 3
Input: string str = “tinni”
Output: 2 3 1 4 5
Salin selepas log masuk

Algoritma

void printPalindromePos(string &str)
START
STEP 1: DECLARE vector<int> pos[MAX]
STEP 2: DECLARE AND ASSIGN n WITH LENGTH OF str
STEP 3: LOOP FOR i = 0 AND i < n AND i++
   pos[str[i]].push_back(i+1)
END LOOP
STEP 4: SET oddCount = 0
STEP 5: DECLARE oddChar
STEP 6: LOOP FOR i=0 AND i<MAX AND i++
   IF pos[i].size() % 2 != 0 THEN,
      INCREMENT oddCount BY 1
      SET oddChar AS i
   END IF
END FOR
STEP 7: IF oddCount > 1 THEN,
   PRINT "NO PALINDROME"
STEP 8: LOOP FOR i=0 AND i<MAX AND i++
   DECRLARE mid = pos[i].size()/2
   LOOP FOR j=0 AND j<mid AND j++
      PRINT pos[i][j]
   END LOOP
END LOOP
STEP 9: IF oddCount > 0 THEN,
   DECLARE AND SET last = pos[oddChar].size() - 1
   PRINT pos[oddChar][last]
   SET pos[oddChar].pop_back();
END IF
STEP 10: LOOP FOR i=MAX-1 AND i>=0 AND i--
   DECLARE AND SET count = pos[i].size()
   LOOP FOR j=count/2 AND j<count AND j++
      PRINT pos[i][j]
STOP
Salin selepas log masuk

Contoh

#include <bits/stdc++.h>
using namespace std;
// Giving the maximum characters
const int MAX = 256;
void printPalindromePos(string &str){
   //Inserting all positions of characters in the given string.
   vector<int> pos[MAX];
   int n = str.length();
   for (int i = 0; i < n; i++)
      pos[str[i]].push_back(i+1);
      /* find the number of odd elements.Takes O(n) */
   int oddCount = 0;
   char oddChar;
   for (int i=0; i<MAX; i++) {
      if (pos[i].size() % 2 != 0) {
         oddCount++;
         oddChar = i;
      }
   }
   /* Palindrome can&#39;t contain more than 1 odd characters */
   if (oddCount > 1)
      cout << "NO PALINDROME";
   /* Print positions in first half of palindrome */
   for (int i=0; i<MAX; i++){
      int mid = pos[i].size()/2;
      for (int j=0; j<mid; j++)
         cout << pos[i][j] << " ";
   }
   // Consider one instance odd character
   if (oddCount > 0){
      int last = pos[oddChar].size() - 1;
      cout << pos[oddChar][last] << " ";
      pos[oddChar].pop_back();
   }
   /* Print positions in second half of palindrome */
   for (int i=MAX-1; i>=0; i--){
      int count = pos[i].size();
      for (int j=count/2; j<count; j++)
      cout << pos[i][j] << " ";
   }
}
int main(){
   string s = "tinni";
   printPalindromePos(s);
   return 0;
}
Salin selepas log masuk

Output

Jika kita menjalankan program di atas - maka ia akan menjana output berikut -

Atas ialah kandungan terperinci Program C untuk mencetak kedudukan aksara yang disusun supaya ia menjadi palindrom. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan