[土狗之路]coursera 與 oj上的遞歸練習作業-- 單詞翻轉 角谷猜想

嗯,遞歸弄得我頭好痛,不過只能忍住繼續學習。

第一題:

編程題#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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章