2015-12-26 137 views
2

我想建立一個程序,它將接受來自用戶的數字並創建弗洛伊德三角形。使用C++打印弗洛伊德三角形

我試過使用弗洛伊德三角形的邏輯,但它的打印作爲一條線。

實施例:

Enter total numbers: 5 
Enter the numbers: 3,8,2,4,9 

O/P:

3 
82 
249 

這是我的代碼:

#include <iostream> 
using namespace std; 

int main() 
{ 
    int totalnos, j, i; 

    cout << "Enter total numbers: "; 
    cin >> totalnos; 

    int numbers[totalnos]; 

    cout << "Enter the numbers: "; 
    for (i = 1; i <= totalnos; i++) 
    { 
     cin >> numbers[i]; 
    } 


    for (i = 1; i <= totalnos; i++) 
    { 
     for (j = 1; j <= 1; j++) 
     { 
      cout << numbers[i]; 
     } 
    } 
} 

回答

0

內部環路可被修改如下:

for (i=0; i < 3; i++) 
{ 

    for (j=0; j<=i; j++) 
    { 
     cout << numbers[i+j]; 


    } 

    cout<<" "; 
} 

硬編碼值「3」可以替換爲「Floyd三角形的行數」。 我認爲這會做到這一點。

1

您遇到下面顯示的那種循環的問題。我不知道這種解決方案是由於你來自帕斯卡世界還是因爲你在其他地方見過。無論如何,你不應該做的循環在1開始,到我,或者至少,你應該考慮到的是,在C-般的世界(çC++的JavaC#,許多其他),數組從索引0開始,結束於索引n - 1,即數組大小爲n

int numbers[totalnos]; 

cout << "Enter the numbers: "; 
for (i = 1; i <= totalnos; i++) 
{ 
    cin >> numbers[i]; 
} 

這個問題實際上你使用不是索引循環是,但是,你必須始終使用訪問0..n-1陣列時。相反

int numbers[totalnos]; 

cout << "Enter the numbers: "; 
for (i = 0; i < totalnos; i++) 
{ 
    cin >> numbers[i]; 
} 

:所以,你可以改變你的循環,只是正確地訪問數組:

int numbers[totalnos]; 

cout << "Enter the numbers: "; 
for (i = 1; i <= totalnos; i++) 
{ 
    cin >> numbers[ i - 1 ]; 
} 

或者你可以做在C-像世界上所有的程序員,在0直接啓動您的索引從1到totalnos,現在你從0到totalnos - 1(注意i < totalnos而不是i <= totalnos,這是一個sutil變化)。

您正在訪問超過數組限制的內存,這意味着您的程序將顯示未定義的行爲(這意味着它可能會崩潰,儘管在某些情況下,似乎沒有任何事情發生,這更加危險)。

現在算法本身。我沒有聽說過三角形的Floyd三角形。它似乎是用自然數從1開始構建的。但是,您要求的數字爲totalnos。您將需要超過totalnos號碼才能構建Floyd三角形與totalnos行。這就是爲什麼你需要調整顯示的數字的位置,考慮到每行的列數(numPos從0開始)。

cout << endl; 
for (i = 0; i < totalnos; i++) 
{ 
    if ((totalnos - i) < numPos) { 
     numPos = totalnos - i; 
    } 

    for (j = 0; j < i; j++) 
    { 
     cout << numbers[numPos] << ' '; 
     ++numPos; 
    } 
    cout << endl; 
} 

你可以找到整個代碼在這裏:http://ideone.com/HhjFpz

希望這有助於。

0

在內循環中,您犯了錯誤,使用j < = 1;應該是j < = i; 而你錯過了新行的'\ n'字符。
這是修復:

#include <iostream> 


using namespace std; 
int main() 
{ 
    int totalnos, j, i, k = 0; 

    cout << "Enter total numbers: "; 
    cin >> totalnos; 

    //int numbers[totalnos]; 

    //cout << "Enter the numbers: "; 
// for (i = 1; i <= totalnos; i++) 
// { 
//  cin >> numbers[i]; 
// } 


    for (i = 1; i <= totalnos; i++) 
    { 
     // your code for (j = 1; j <= 1; j++) 
     for(j=1; j<=i; ++j) // fixed 
      cout << k+j << ' '; 
     ++k; 
     cout << endl; // fix 

    } 
}