遞歸真的好難?。?br> 編程題#1:單詞翻轉(zhuǎn)
來源: POJ (Coursera聲明:在POJ上完成的習(xí)題將不會計(jì)入Coursera的最后成績。)
注意: 總時(shí)間限制: 1000ms 內(nèi)存限制: 65536kB
描述
輸入一個(gè)句子(一行),將句子中的每一個(gè)單詞翻轉(zhuǎn)后輸出。
輸入
只有一行,為一個(gè)字符串,不超過500個(gè)字符。單詞之間以空格隔開。所謂單詞指的是所有不包含空格的連續(xù)的字符。
這道題請用cin.getline輸入一行后再逐個(gè)單詞遞歸處理。
輸出
翻轉(zhuǎn)每一個(gè)單詞后的字符串,單詞之間的空格需與原文一致。
樣例輸入
hello world.
樣例輸出
olleh .dlrow
#include<iostream>
using namespace std;
int i = 0;
char input[501];
int recur() {
char c = input[i];
i++;
if (c == ' ') {
return 1;
}
if (c == '\0'){
return 0;
}
if (c != ' '&&c != '\0') {
recur();
cout << c;
}
return 1;
}
int main() {
cin.getline(input, 501);
if (recur() == 1)//只有最外面一層的recur函數(shù)才會有返回值到這里,所以可以放心的打‘ ’
cout << ' ';
while (input[i] != '\0') {
if (recur() == 1)//每次遇到空格,都會返回1,所以打印一個(gè)空格
cout << ' ';
}
if (input[i] == '\0') {
cout << endl;//最后輸出換行符
return 0;
}
}
編程題#2:角谷猜想
來源: POJ (Coursera聲明:在POJ上完成的習(xí)題將不會計(jì)入Coursera的最后成績。)
注意: 總時(shí)間限制: 1000ms 內(nèi)存限制: 65536kB
描述
所謂角谷猜想,是指對于任意一個(gè)正整數(shù),如果是奇數(shù),則乘3加1,如果是偶數(shù),則除以2,得到的結(jié)果再按照上述規(guī)則重復(fù)處理,最終總能夠得到1。如,假定初始整數(shù)為5,計(jì)算過程分別為16、8、4、2、1。
程序要求輸入一個(gè)整數(shù),將經(jīng)過處理得到1的過程輸出來。
輸入
一個(gè)正整數(shù)
輸出
從輸入整數(shù)到1的步驟,每一步為一行,每一部中描述計(jì)算過程,假定輸入為7,則輸出為:
73+1=22
22/2=11
113+1=34
34/2=17
173+1=52
52/2=26
26/2=13
133+1=40
40/2=20
20/2=10
10/2=5
5*3+1=16
16/2=8
8/2=4
4/2=2
2/2=1
最后一行輸出"End",如果輸入為1,直接輸出"End"
樣例輸入
5
樣例輸出
5*3+1=1616/2=88/2=44/2=22/2=1End
#include"iostream"
using namespace std;
void cal(int x){
if (x == 1){
cout << "End";
return;
}
if (x % 2 == 0){
cout << x << "/2=" << x / 2 << endl;
cal(x / 2);
}
else{
cout << x << "*3+1=" << x * 3 + 1 << endl;
cal(x * 3 + 1);
}
}
int main(){
int x;
cin >> x;
cal(x);
return 0;
}
編程題#3:排隊(duì)游戲
來源: POJ (Coursera聲明:在POJ上完成的習(xí)題將不會計(jì)入Coursera的最后成績。)
注意: 總時(shí)間限制: 1000ms 內(nèi)存限制: 65536kB
描述
在幼兒園中,老師安排小朋友做一個(gè)排隊(duì)的游戲。首先老師精心的把數(shù)目相同的小男孩和小女孩編排在一個(gè)隊(duì)列中,每個(gè)小孩按其在隊(duì)列中的位置發(fā)給一個(gè)編號(編 號從0開始)。然后老師告訴小朋友們,站在前邊的小男孩可以和他后邊相鄰的小女孩手拉手離開隊(duì)列,剩余的小朋友重新站攏,再按前后相鄰的小男孩小女孩手拉 手離開隊(duì)列游戲,如此往復(fù)。由于教師精心的安排,恰好可以保證每兩個(gè)小朋友都能手拉手離開隊(duì)列,并且最后離開的兩個(gè)小朋友是編號最小的和最大的兩個(gè)小朋 友。(注:只有小男孩在前,小女孩在后,且他們兩之間沒有其他的小朋友,他們才能手拉手離開隊(duì)列)。請根據(jù)老師的排隊(duì),按小女孩編號從小到大的順序,給出 所有手拉手離開隊(duì)列的小男孩和小女孩的編號對。
輸入
用一個(gè)字符串代表小朋友隊(duì)列。字符串中只會出現(xiàn)兩個(gè)字符(樣例輸入里用的是 括號但實(shí)際數(shù)據(jù)則不一定),分別代表小男孩和小女孩,首先出現(xiàn)的字符代表小男孩,另一個(gè)字符代表小女孩。小孩總數(shù)不超過100
輸出
按小女孩編號順序,順序輸出手拉手離開隊(duì)列的小男孩和小女孩的編號對,每行一對編號,編號之間用一個(gè)空格分隔。

#include"iostream"
using namespace std;
void date(char q[], char b,int n,int len){
if (n ==len)
return;
for (int i = n; q[i] != '/0'; i++){
if (q[i] == b){
date(q, b, i + 1,len);
return;
}else{
for (int j = i-1; j>=0; j--){
if (q[j] == b){
q[j] = '0';
q[i] = '0';
cout << j << ' ' << i << endl;
date(q, b, i + 1,len);
return;
}
}
}
}
}
int main(){
char q[101];
cin.getline(q, 100);
date(q, q[0], 0,strlen(q));
return 0;
}
編程題#4:擴(kuò)號匹配問題
來源: POJ (Coursera聲明:在POJ上完成的習(xí)題將不會計(jì)入Coursera的最后成績。)
注意: 總時(shí)間限制: 1000ms 內(nèi)存限制: 65536kB
描述
在某個(gè)字符串(長度不超過100)中有左括號、右括號和大小寫字母;規(guī)定(與常見的算數(shù)式子一樣)任何一個(gè)左括號都從內(nèi)到外與在它右邊且距離最近的右括號匹配。寫一個(gè)程序,找到無法匹配的左括號和右括號,輸出原來字符串,并在下一行標(biāo)出不能匹配的括號。不能匹配的左括號用"$"標(biāo)注,不能匹配的右括號用"?"標(biāo)注.
輸入
輸入包括多組數(shù)據(jù),每組數(shù)據(jù)一行,包含一個(gè)字符串,只包含左右括號和大小寫字母,字符串長度不超過100
注意:cin.getline(str,100)最多只能輸入99個(gè)字符!
輸出
對每組輸出數(shù)據(jù),!!!輸出兩行,第一行包含原始輸入字符!!!,第二行由"$","?"和空格組成,"$"和"?"表示與之對應(yīng)的左括號和右括號不能匹配。
