WERTYU 回文詞 猜數字 生成元 環狀序列

2021-08-28 10:13:04 字數 3286 閱讀 7262

把手放在鍵盤上時,稍不注意就會往右錯一位。這樣,輸入q會變成輸入w,輸入j會變成輸入k等。       

輸入乙個錯位後敲出的字串(所有字母均大寫),輸出打字員本來想打出的句子。輸入保證合法,即一定是錯位之後的字串。例如輸入中不會出現大寫字母a。

o s, gomr ypfsu/

i am fine today.

每輸入乙個字元,都可以直接輸出乙個字元,因此getchar是輸入的理想方法。問題在於:如何進行這樣輸入輸出變換呢?乙個較好的方法是使用常量陣列。

#include char s[ ] = "`1234567890-=qwertyuiop\\asdfghjkl;'zxcvbnm,./";

int main()

return 0;

}

常量陣列s中的 \\ 是轉義字元。用 \\ 這個字元來表示真正意義上的反斜線即 \ 。

輸入乙個字串,判斷它是否為回文以及映象串。輸入字串保證不含數字0.所謂回文串,就是反轉之後原串相同,如abba和madam。所謂映象串,就是左右映象之後和原串相同,如2s和3aiae。注意,並不是每個字元在映象之後都能得到乙個合法字元,本題中,每個字元的映象如下所示,(空白項表示該字元映象後不能得到乙個合法的字元)。

輸入的每行包含乙個字串(保證只有上述字元。不含空白字元),判斷它是否是回文串和映象串(共4種組合)。每組資料之後輸出乙個空行。

notapalindrome

isapalinilapasi

2a3meas

atoyota

notapalindrome -- is not a palindrome.

isapalinilapasi -- is a regular palindrome.

2a3meas -- is a mirrored string.

atoyota -- is a mirrored palindrome. 

#include#include#includeusing namespace std;

const char* rev = "a 3 hil jm o 2tuvwxy51se z 8 "; //指標名可直接當陣列名使用,均指代位址

const char* msg = ;

//四種組合:既不是回文也不是映象、只是回文、只是映象、既是回文又是映象

char mirror(char ch)

int main()

cout << s << " -- is " << msg[m * 2 + p] << '.' << endl << endl;

}return 0;

}

本題用isalpha來判斷字元是否為字母,類似的還有isdigit、isprint等,在ctype.h中定義。由於ascii碼表中大寫字母、小寫字母和數字都是連續的,如果ch是大寫字母,則ch-'a'就是它在字母表中的序號(a的序號是1,b的序號是2,依此類推);類似地,如果ch是數字,則ch-'0'就是這個數字的數值本身(『5』-『0』=5)。

ctype.h中定義的isalpha、isdigit、isprint等工具可以用來判斷字元的屬性,而toupper、tolower等工具可以用來轉換大小寫。

實現乙個經典的「猜數字」遊戲。給定答案序列和使用者猜的序列,統計有多少數字位置正確(a),有多少數字在兩個序列都出現過但位置不對(b)。

輸入包含多組資料。每組輸入第一行為序列長度 n,第二行是答案序列,接下來若干行猜測序列。猜測序列全0 時該組資料結束。 n=0時輸入結束。

41 3 5 5

1 1 2 3

4 3 3 5

6 5 5 1

6 1 3 5

1 3 5 5

0 0 0 0

101 2 2 2 4 5 6 6 6 9

1 2 3 4 5 6 7 8 9 1

1 1 2 2 3 3 4 4 5 5

1 2 1 3 1 5 1 6 1 9

1 2 2 5 5 5 6 6 6 7

0 0 0 0 0 0 0 0 0 0

0game 1:

(1,1)

(2,0)

(1,2)

(1,2)

(4,0)

game 2:

(2,4)

(3,2)

(5,0)

(7,0)

直接統計可得a,為了求b,對於每個數字(1-9),統計二者出現的次數c1和c2,則min(c1,c2)就是該數字對於b的貢獻。最後減去a的部分。

#include #define maxn 1010

int main()

if(b[0] == 0) break;//正常的猜測序列不會有0,所以只判斷第乙個數是否為0即可

for(int d = 1; d <= 9; d++)

if(c1 < c2) b+= c1; else b+= c2;

}printf(" (%d,%d)\n", a, b-a);

} } return 0;

}

如果x加上x的各個數字之和得到y,就說x是y的生成元。

給出n(1≤n≤100000),求最小 生成元。無解輸出0。例如,n=216,121,2005時的解分別為198,0,1979。

#include#include#define maxn 100005

int ans[maxn];

int main()

if(ans[y] == 0 || m < ans[y]) ans[y] = m;

} scanf("%d", &t);

while(t--)

return 0;

}

長度為n的環狀串有n種表示法,分別為從某個位置開始順時針得到。例如,圖3-4的環狀串有10種表示:cgagtcagct,gagtcagctc,agtcagctcg等。在這些表示法中,字典序最小的稱為」最小表示」。

輸入乙個長度為n(n≤100)的環狀dna串(只包含a、c、g、t這4種字元)的一種表示法,你的任務是輸出該環狀串的最小表示。

#include#include#define maxn 105

// 環狀串s的表示法p是否比表示法q的字典序小

int less(const char* s, int p, int q)

int main()

return 0;

}

回文詞 題解

題目描述 回文詞是一種對稱的字串 也就是說,乙個回文詞,從左到右讀和從右到左讀得到的結果是一樣的。任意給定乙個字串,通過插入若干字元,都可以變成乙個回文詞。你的任務是寫乙個程式,求出將給定字串變成回文詞所需插入的最少字元數。比如字串 ab3bd 在插入兩個字元後可以變成乙個回文詞 dab3bad 或...

模擬 回文詞

題目描述 回文詞是一種對稱的字串,也就是說 乙個回文詞,從左向右讀和從右向左讀的結果都是一樣的.任意給定乙個字串,通過插入若干個字元,都可以變成乙個回文詞.你的任務是寫乙個程式,求出給定字串變成回文詞所需插入的最小字元數.比如,字串 ab3db 在插入兩個字元後可以變成乙個回文詞 dab3bad a...

回文詞 C語言

題目描述 輸入乙個字串,判斷它是否為回文以及映象串。輸入字串保證不含數字0.所謂回文串,就是反轉之後原串相同,如abba和madam。所謂映象串,就是左右映象之後和原串相同,如2s和3aiae。注意,並不是每個字元在映象之後都能得到乙個合法字元,本題中,每個字元的映象如下所示,空白項表示該字元映象後...