我們在作業(yè)中收到一個問題。我在解釋它時遇到了困難,所以我用c++用同樣的條件重寫了它。然而,我似乎無法獲得問題中列出的正確輸出。有誰能建議我怎么做?
這是一個小問題。
這是我的代碼:
#include <iostream>
#include <string>
using namespace std;
int main(){
int n; //AreWeThereYet
string a;
a="Yes we have arrived";
string b;
b="We just left";
string c;
c="That was annoying";
string d;
d="Almost";
int i;
cout << "enter n" << endl;
cin >> n;
for(int i=0;i<=n;i++){
//here starts the calc
if(n==0){
cout << a << endl;
return 0;
}
if(n>5){
cout << b << endl;
n=(n-1);
}else if(n>1){
n=(n-2);
cout << c << endl;
}else{
cout << d << endl;
n=(n-1);
}
}
}
循環(huán)似乎無法輸出第一個和最后一個問題。
我想,如果我重復這個問題,我可以通過反復試驗來獲得我需要的答案。下面我附上了我的輸出圖像。我預計輸入“1”將輸出“幾乎”,然后是“是的,我們已經(jīng)到了”。
我們可以檢查并討論第一個案例。
輸出應該是:
如果你畫一條數(shù)字線:
然后,我們只看輸出并開始推理。
幾乎出現(xiàn)在負片和1上。我們可以排除負數(shù),因為沒有辦法從負數(shù)跳到正數(shù),因為每個例子都做減法。所以,第一個“幾乎”意味著n是1。這就解釋了前兩行,但不是最后兩行。那么,我們怎么會說“那很煩人”?
它需要n在[2,5]范圍內(nèi)。注意,在這種情況下,它首先進行遞歸調(diào)用,然后打印“這很煩人”。那么,
n
的起始值是多少呢?它可以落在'That was perating'塊中,并稱之為'Almost'塊?答案是3。假設n=3,我們將手動遍歷算法。
當n==3時,就進入n>1的狀態(tài)。它要做的第一件事是用值n-2=1調(diào)用自己。這將打印“幾乎”,然后打印“是的,我們已經(jīng)到達了”,因為帶有“幾乎”的塊用n-1=0調(diào)用自己。現(xiàn)在所有的嵌套調(diào)用都處理好了,當n==3時,我們返回到初始塊,并打印“that was peating”,但只打印一次。所以,3是不對的。
如果我想再次打印'That was perating',那么我只需要將n增加到4。
我們可以快速檢查n=4。我將降落在“惱人”塊,打一個電話與n-2=2和土地在“惱人”塊再次(我們需要打印'這是惱人的兩次),并作出另一個電話與n-2=0。我們跳過了“差不多”,所以4是不對的。
所以我們看5。5 - 2 = 3, 3 - 2 = 1. 一直跟蹤,應該會產(chǎn)生相同的輸出。
沒有密碼,只有一條號碼線和追蹤電話。這可以通過物理記事卡或繪制遞歸堆棧來完成。
如果你仔細看第三個輸出,你應該注意到它已經(jīng)基本解決了,因為最后四行和我們剛剛解決的塊是一樣的。
這是一個極好的problem-solving技巧;使用以前解決的問題來分解和解決更大的問題。這就是為什么這個任務最好不用代碼來完成,你可以想出解決方案。其他人的解決方案最終成為你自己池中唯一的解決方案,你會更加掙扎。