“回文”是指正讀反讀都能讀通的句子,它是古今中外都有的一種修辭方式和文字游戲,如“我為人人,人人為我”等。在數(shù)學(xué)中也有這樣一類(lèi)數(shù)字有這樣的特征,成為回文數(shù)(palindrome number)。
設(shè)n是一任意自然數(shù)。若將n的各位數(shù)字反向排列所得自然數(shù)n1與n相等,則稱(chēng)n為一回文數(shù)。例如,若n=1234321,則稱(chēng)n為一回文數(shù);但若n=1234567,則n不是回文數(shù)。
題目:“回文串”是一個(gè)正讀和反讀都一樣的字符串,比如"level"或者“noon”等等就是回文串。花花非常喜歡這種擁有對(duì)稱(chēng)美的回文串,生日的時(shí)候她得到了兩個(gè)禮物分別是字符串A和字符串B?,F(xiàn)在她非常好奇有沒(méi)有辦法將字符串B插入字符串A使產(chǎn)生的字符串是一個(gè)回文串。你接受?chē)W嘩的請(qǐng)求,幫助她尋找有多少種插入辦法可以使新串是一個(gè)回文串。如果字符串B插入的位置不同就考慮為不一樣的辦法。
例如:
A=“abc”, B=“b”.有4種把B插入A的方法:
在A的第一個(gè)字母之前:即“baba”,判斷不是回文
在第一個(gè)字母‘a(chǎn)’之后:即“abba”,判斷是回文
在字母‘b’之后:即“abba”,判斷是回文
在第二個(gè)字母‘a(chǎn)’之后:即“abab”,判斷不是回文
所以滿(mǎn)足條件的答案就是2
我的想法是,主要把字符串b整體逐次插入進(jìn)字符串a(chǎn)的空缺部分并且字符串a(chǎn),組成新的數(shù)組,則我用一個(gè)do while循環(huán)來(lái)始終判斷字符串a(chǎn)的那個(gè)'\0',來(lái)進(jìn)行循環(huán)來(lái)對(duì)臨時(shí)數(shù)組buff來(lái)組成再判斷。所以要對(duì)字符串a(chǎn)來(lái)一個(gè)個(gè)字符的拆分,我用了strncat函數(shù)來(lái)對(duì)字符串a(chǎn)進(jìn)行逐個(gè)字符鏈接到新的buff里面。
循環(huán)內(nèi)首先對(duì)buff清零
第1步,將字符串b插在字符串a(chǎn)的最前面,則把str_a的前0個(gè)字符連接進(jìn)buff,然后將b連接進(jìn)buff,最后將str_a剩下的部分連接在buff后面。這里使用了一個(gè)指針pstr_a來(lái)操作對(duì)str_a被分割的后半部分。用變量i來(lái)操作對(duì)str_a前i位連接進(jìn)buff的前半部分。則第一步為把str_a的前i = 0位連接進(jìn)buff,然后將str_b連接進(jìn)buff,然后將pstr_a++指向的后半部分連接進(jìn)buff(此時(shí)pstr_a指向str_a整體)。然后進(jìn)行回文判斷。
第2步,首先清零buff,因?yàn)閕++,此時(shí)將str_a的前i = 1位字符連接進(jìn)buff,然后str_b連接進(jìn)buff,然后將pstr++目前指向的字符串連接進(jìn)buff(此時(shí)pstr_a指向str_a第一個(gè)字符后面的所有字符ba).然后進(jìn)行回文判斷。
第3步,首先清零buff,因?yàn)閕++,此時(shí)將str_a的前i = 2位字符連接進(jìn)buff,然后str_b連接進(jìn)buff,然后將pstr++目前指向的字符串連接進(jìn)buff(此時(shí)pstr_a指向str_a第二個(gè)字符后面的所有字符a).然后進(jìn)行回文判斷。
第4步,首先清零buff,因?yàn)閕++,此時(shí)將str_a的前i = 3位字符連接進(jìn)buff,然后str_b連接進(jìn)buff,然后將pstr++目前指向的字符串連接進(jìn)buff(此時(shí)pstr_a指向str_a第三個(gè)字符后面的所有字符也就字符‘\0’).然后進(jìn)行回文判斷。
因?yàn)閜str_a指向字符‘\0’,while循環(huán)不符合,循環(huán)結(jié)束。
回文判斷函數(shù)簡(jiǎn)單,就不詳細(xì)講解了。
在循環(huán)內(nèi)每一次進(jìn)行回文判斷成功后,count++來(lái)統(tǒng)計(jì)是回文字符串的數(shù)值,最后打印終端即可。
代碼:#include "stdio.h"
#include "string.h"
//判斷回文函數(shù)
int Judge_HW(char *str_temp, int len)
{
int i = 0;
for(i = 0; i< (len / 2); i++)
{
if(str_temp[i] == str_temp[len - i - 1])continue;
else return 0;
}
return 1;
}
int main(int argc, char const *argv[])
{
char str_a[128] = {0};
char str_b[128] = {0};
char str_buff[256] = {0};
char *pstr_a = str_a;
unsigned int count = 0;
size_t i = 0;
printf("請(qǐng)輸入字符串A:");
scanf("%s",str_a);
printf("請(qǐng)輸入字符串B:");
scanf("%s",str_b);
do{
strcpy(str_buff,"\0");//清零buff
strncat(str_buff, str_a, i++);//加入a前半部分
strcat(str_buff, str_b);//插入b
strcat(str_buff, pstr_a);//放入字符串a(chǎn)的后半部分
if(Judge_HW(str_buff, strlen(str_buff)))count++;
}while('\0' != *pstr_a++);
printf("回文數(shù)個(gè)數(shù)為%d個(gè)\n",count);
return 0;
}
運(yùn)行結(jié)果:你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧