在本文中,我們將討論如何檢查給定字串中每個單字的字元是否可以重新排列以形成等差數列(AP)。我們還將使用C 實作解決方案,並提供一個範例來說明程式碼的工作原理。
等差數列(AP)是一組數字的序列,其中每個項都是透過將常數d加到前一項來獲得的。常數d被稱為公差。
例如,序列 1, 3, 5, 7, 9 是一個公差為 2 的等差數列。
要檢查給定字串中每個單字的字元是否可以重新排列以形成等差數列,我們將按照以下方法進行操作−
我們將把給定的字串分割成單字。
對於每個單字,我們將按字母順序對字元進行排序。
我們將計算排序單字中相鄰字元的公差。
如果對於所有相鄰字元對來說,公差都相同,那麼單字的字元可以重新排列,形成一個等差數列。
我們將對給定字串中的所有單字重複執行步驟2-4。
如果所有的單字可以重新排列組成一個等差數列,那麼我們回傳true。否則,返回false。
讓我們在C 中實作上述方法 -
#include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; bool canFormAP(string s) { vector<string> words; string word = ""; for(char c : s) { if(c == ' ') { words.push_back(word); word = ""; } else { word += c; } } words.push_back(word); for(string w : words) { sort(w.begin(), w.end()); int n = w.length(); if(n <= 2) { continue; } int d = w[1] - w[0]; for(int i = 2; i < n; i++) { if(w[i] - w[i-1] != d) { return false; } } } return true; } int main() { string s = "tutorialspoint"; if(canFormAP(s)) { cout << "Characters of each word can be rearranged to form an Arithmetic Progression\n"; } else { cout << "Characters of each word cannot be rearranged to form an Arithmetic Progression\n"; } return 0; }
Characters of each word cannot be rearranged to form an Arithmetic Progression
在上面的程式碼中,canFormAP函數接受一個字串s作為輸入,並傳回true,如果字串中每個單字的字元可以重新排列以形成等差數列。 main函數呼叫canFormAP函數,將字串"hello world"作為輸入,並根據函數的回傳值列印對應的訊息。
讓我們考慮一個範例測試案例來理解上述程式碼的工作原理 -
string s = "the quick brown fox jumps over the lazy dog";
在這個例子中,給定的字串是「the quick brown fox jumps over the lazy dog」。字串中的每個單字都可以重新排列以形成一個等差數列。例如,單字“quick”可以重新排列成等差數列“cikqu”,其公差為2。正如我們所討論的,單字“lazy”可以重新排列成等差數列“alzy”,其公差為11。
因此,在這個例子中,給定字串中每個單字的字元可以重新排列以形成等差數列,程式碼的輸出是"字元可以重新排列以形成等差數列"。
在本文中,我們討論瞭如何檢查給定字串中每個單字的字元是否可以重新排列以形成等差數列(AP)。我們採用了一種簡單的方法,即對每個單字的字元進行排序,並檢查相鄰字元對之間的公差是否相同。我們還提供了一個在C 中實作解決方案的範例,並用一個範例測試案例進行了解釋。
這個問題可以有各種實際應用。例如,在密碼學中,重新排列字串的字元可以用於加密原始訊息,並且檢查字元是否可以重新排列以形成一個等差數列可以用作解密過程中的驗證步驟。
以上是檢查每個單字的字元是否可以重新排列以形成等差數列(AP)的詳細內容。更多資訊請關注PHP中文網其他相關文章!