嗯,遞歸弄得我頭好痛,不過只能忍住繼續學習。
第一題:
編程題#1:單詞翻轉
來源: POJ (Coursera聲明:在POJ上完成的習題將不會計入Coursera的最後成績。)
注意: 總時間限制: 1000ms 內存限制: 65536kB
描述
輸入一個句子(一行),將句子中的每一個單詞翻轉後輸出。
輸入
只有一行,爲一個字符串,不超過500個字符。單詞之間以空格隔開。所謂單詞指的是所有不包含空格的連續的字符。
這道題請用cin.getline輸入一行後再逐個單詞遞歸處理。
輸出
翻轉每一個單詞後的字符串,單詞之間的空格需與原文一致。
樣例輸入
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 != ' '&&c != '\0') {
recur();
cout << c;
}
return 1;
}
int main() {
cin.getline(input, 501);
if (recur() == 1)//只有最外面一層的recur函數纔會有返回值到這裏,所以可以放心的打‘ ’
cout << ' ';
while (input[i] != '\0') {
if (recur() == 1)//每次遇到空格,都會返回1,所以打印一個空格
cout << ' ';
}
if (input[i] == '\0') {
cout << endl;//最後輸出換行符
return 0;
}
}
然後直接來下一題,角谷猜想:
編程題#2:角谷猜想
來源: POJ (Coursera聲明:在POJ上完成的習題將不會計入Coursera的最後成績。)
注意: 總時間限制: 1000ms 內存限制: 65536kB
描述
所謂角谷猜想,是指對於任意一個正整數,如果是奇數,則乘3加1,如果是偶數,則除以2,得到的結果再按照上述規則重複處理,最終總能夠得到1。如,假定初始整數爲5,計算過程分別爲16、8、4、2、1。
程序要求輸入一個整數,將經過處理得到1的過程輸出來。
輸入
一個正整數
輸出
從輸入整數到1的步驟,每一步爲一行,每一部中描述計算過程,假定輸入爲7,則輸出爲:
7*3+1=22
22/2=11
11*3+1=34
34/2=17
17*3+1=52
52/2=26
26/2=13
13*3+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=16 16/2=8 8/2=4 4/2=2 2/2=1 End
#include<iostream>
using namespace std;
int calculate(int a) {
if (a == 1) {
cout << "End";//到1爲止
return 0;
}
else {
if (a % 2 == 0) {
cout << a << '/' << 2 << '=' << a / 2 << endl;
a = a / 2;
calculate(a);
return 0;
}
if (a % 2 == 1) {
cout << a << "*3+1=" << a * 3 + 1 << endl;//我也不知道我是有懶,反正中間的*3+1就是打印出來看看
a = a * 3 + 1;
calculate(a);
return 0;
}
}
}
int main() {
int a;
cin >> a;
calculate(a);
return 0;
}