“回文”是指正讀反讀都能讀通的句子,它是古今中外都有的一種修辭方式和文字游戲,如“我為人人,人人為我”等。在數(shù)學(xué)中也有這樣一類(lèi)數(shù)字有這樣的特征,成為回文數(shù)(palindrome number)。
公司主營(yíng)業(yè)務(wù):成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶(hù)真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶(hù)帶來(lái)驚喜。創(chuàng)新互聯(lián)建站推出洪澤免費(fèi)做網(wǎng)站回饋大家。設(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)查看詳情吧