我們將僅由若干個同一小寫字母構成的字串稱之為簡單串,例如」aaaa」是乙個簡單串,而」abcd」則不是簡單串。現在給你乙個僅由小寫字母組成的字串,你需要用最小的花費,將其轉換成乙個簡單串。 花費的計算規則如下:將a到z這26個小寫字母從左到右排成一排,則每個字母都有左右兩個鄰居,我們認為a的左鄰居是z,z的右鄰居是a。乙個字母只能轉換成其相鄰的字母,轉換的花費為1。乙個字母可以進行多次轉換,例如將a轉換成d,可以進行如下的步驟: a->b->c->d,花費為3。字串的轉換花費為所有字母轉換花費之和。例如將字串」abbbz」轉換成簡單串的最小花費為3,轉換後的結果為」bbbbb」。
第一行乙個整數t(t≤100),表示測試資料的組數。 每組測試資料只有一行,為僅含小寫字母的字串,字串長度不超過1000。
對於每一組資料,輸出乙個整數,表示將字串轉換成簡單串的最小花費。
2
abbba
abbac
2
3
1.以a為基準,b轉換為a花費為1,轉換為z花費為1,轉換為c花費為2,轉換為y花費為2,以此類推可以得到乙個花費陣列spend[13];
2.遍歷一遍字串陣列str[n],得到字串的長度length和每個字母出現的次數儲存在character[26]陣列中
3.遍歷character[26]陣列,對character[i]不為0(為零表示對應字母沒有出現),進行轉換,計算將字串轉換為character[i]對應字母的總花費,找出最小值。
1.spend陣列
for(i = 1, j = 25; i
< 13, j > 13; i++, j--)
2.輸入並遍歷字串scanf("%s",str);
while(str[i] != '\0')
i = 0;
計算花費int
count = 0;
//初始化最小值
int min = 10000;
for(i = 0; i < 26; i++)
// 找出最小值
if(min > count)
min = count;}}
完整**#include
int main()
; spend[13] = 13;
for(k = 0; k < n; k++)
;// 宣告字串
char
str[1001];
// 字串長度
int length = 0;
for(i = 1, j = 25; i < 13, j > 13; i++, j--)
// 輸入字串
scanf("%s",str);
// 計算字串長度和每個字母出現的次數
i = 0;
length = 0;
while(str[i] != '\0')
i = 0;
intcount = 0;
int min = 10000;
for(i = 0; i < 26; i++)
if(min > count)
min = count;}}
printf("%d\n", min);
}return
0;}
執行例項
字串轉換
problem description 小明和他的好朋友小西在玩乙個新的遊戲,由小西給出乙個由小寫字母構成的字串,小明給出另乙個比小西更長的字串,也由小寫字母組成,如果能通過魔法轉換使小明的串和小西的變成同乙個,那麼他們兩個人都會很開心。這裡魔法指的是小明的串可以任意刪掉某個字元,或者把某些字元對照...
字串轉換
編寫乙個程式,可以一直接收鍵盤字元 如果是小寫字元就輸出對應的大寫字元 如果接收的是大寫字元,就輸出對應的小寫字元 如果是數字不輸出 其餘原樣輸出。程式 如下 define crt secure no warnings include include include 該庫檔案isalnum 包含此函...
字串轉換
描述 我們將僅由若干個同一小寫字母構成的字串稱之為簡單串,例如 aaaa 是乙個簡單串,而 abcd 則不是簡單串。現在給你乙個僅由小寫字母組成的字串,你需要用最小的花費,將其轉換成乙個簡單串。花費的計算規則如下 將a到z這26個小寫字母從左到右排成一排,則每個字母都有左右兩個鄰居,我們認為a的左鄰...