Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么它不是一个完美的三角形C++;?_C++_Pascals Triangle - Fatal编程技术网

C++ 为什么它不是一个完美的三角形C++;?

C++ 为什么它不是一个完美的三角形C++;?,c++,pascals-triangle,C++,Pascals Triangle,我刚刚完成了这个pascal三角形项目,输出不是一个正确的三角形,有人知道为什么会发生这种情况吗,间距看起来是对的,它只是偏离了路线 #include <string> #include <iostream> using namespace std; int factorial(int numPar); //the factorial function will recieve a number, and return that number's factorial i

我刚刚完成了这个pascal三角形项目,输出不是一个正确的三角形,有人知道为什么会发生这种情况吗,间距看起来是对的,它只是偏离了路线

#include <string> 
#include <iostream>
using namespace std;
int factorial(int numPar); //the factorial function will recieve a number, and return that number's factorial
int pascalNum(int rowPar, int elementPar);
int main(){
    //declarations
    string strOutput = "";
    int userNum;
    int rowCounter = 0;
    int elementCounter = 0;
    int columnsPerRow = 1;
    int spaces;
    int initialSpaces;
    int counter = 0;
    //get user input
     cout << "Enter an integer from 1 to 10: ";
    cin >> userNum;
    while (userNum > 10 || userNum < 1){
        cout << "Invalid entry: " << endl;
        cin >> userNum;
    }
    initialSpaces = userNum + 4; //needed to make the triangle an isoscoles, and keep it away from left
    //calculations
    while ((rowCounter + 1) <= userNum){
        for (counter = initialSpaces; counter > 0; counter--){
            strOutput = strOutput + " ";
        }
        while (elementCounter < columnsPerRow){
            strOutput = strOutput + to_string(pascalNum(rowCounter, elementCounter));
            if (pascalNum(rowCounter, elementCounter) < 10){
                spaces = 3;
            }
            else if (pascalNum(rowCounter, elementCounter) < 100){
                spaces = 2;
            }
            else if (pascalNum(rowCounter, elementCounter) < 1000){
                spaces = 1;
            }
            while (spaces > 0){
                strOutput = strOutput + " ";
                spaces = spaces - 1;
            }
            elementCounter = elementCounter + 1;
        }

        cout << strOutput << endl;
        columnsPerRow = columnsPerRow + 1;
        elementCounter = 0;
        rowCounter = rowCounter + 1;
        //initialSpaces--; //this makes there be less and less space until the triangle starts
        strOutput = "";
    }

    system("pause>nul");
    return 0;
}
int factorial(int numPar) {
    //declarations
    int counter = 1;
    int numResult = 1;
    int initial = numPar;
    if (numPar > 1){
        while (counter <= numPar){
            numResult = numResult * counter;
            counter++;
        }
        return numResult;
    }
    else
        return 1;
}
int pascalNum(int rowPar, int elementPar){
    int answer;
    answer = factorial(rowPar) / (factorial(elementPar) * factorial(rowPar - elementPar));
    return answer;
}
#包括
#包括
使用名称空间std;
整数阶乘(int numPar)//阶乘函数将接收一个数字,并返回该数字的阶乘
int pascalNum(int rowPar,int elementPar);
int main(){
//声明
字符串strOutput=“”;
int userNum;
int rowCounter=0;
int元素计数器=0;
int columnsPerRow=1;
int空间;
int初始值空间;
int计数器=0;
//获取用户输入
cout>userNum;
而(userNum>10 | | userNum<1){
coutusernum;
}
initialSpaces=userNum+4;//需要使三角形成为等高线,并使其远离左侧
//计算
而((行计数器+1)0;计数器--){
strOutput=strOutput+“”;
}
while(元素计数器<列箭头){
strOutput=strOutput+to_字符串(pascalNum(rowCounter,elementCounter));
if(pascalNum(行计数器、元素计数器)<10){
空间=3;
}
else if(pascalNum(行计数器、元素计数器)<100){
空间=2;
}
else if(pascalNum(行计数器,元素计数器)<1000){
空间=1;
}
while(空格>0){
strOutput=strOutput+“”;
空格=空格-1;
}
elementCounter=elementCounter+1;
}
法庭(1){

然而(counter好吧,你的布局是错误的。首先你必须计算出你的数字单元格布局。你已经有了实现这一点的代码的开头,但是你把所有额外的空格都放在了右边

你可能想要的是居中的东西。这意味着,对于最多三个数字,你需要左边的一个空格,对于一个数字,你需要两边的空格。总的来说,你需要单元格之间的一个空格。因此,你的填充代码改为:

    for(int elementCounter  = 0; elementCounter < columnsPerRow;  
        elementCounter = elementCounter + 1){
        // Don't Repeat Yourself
        int num = pascalNum(rowCounter, elementCounter);
        string numStr = to_string(num);
        if (num < 10){
            numStr = numStr + " ";
        }
        if (num < 100){
            numStr = string(" ") + numStr;
        }
        strOutput += numStr; 
    }
现在看看这个模式,瞧,每行左边有两个缩进空格,或者说
2*(9-r)
total,其中
r
0
9
。相应地修复外部(行)循环,去掉
initialSpaces
的东西:

while ((rowCounter + 1) <= userNum){
    for (counter = 2 * (9 - rowCounter); counter > 0; counter--){
        strOutput = strOutput + " ";
    }
    // ... continue as above ...
while((行计数器+1)0;计数器--){
strOutput=strOutput+“”;
}
//…如上所述继续。。。
这应该能解决问题。故事的寓意:

别忘了拟定您预期的输出格式。
如果有必要,请使用图表纸。

如果您要描述您希望代码执行的操作,并具体描述它与当前执行的操作有何不同,这将有助于您获得更好的答案。我想要一个完美的三角形,这有点倾斜,而不是完美的,我只是想弄清楚如何复制CMDY的输出你能把你当前的输出加进去吗?正好中间有一半的三角形有一个屏幕,那就是一个完美的三角形。代码打印了一个三角形,没有定义什么是完美的,它是一样好的。你是指一个等边三角形吗?你想要顶点顶点为中心吗?你想要修复的缺陷是什么?
while ((rowCounter + 1) <= userNum){
    for (counter = 2 * (9 - rowCounter); counter > 0; counter--){
        strOutput = strOutput + " ";
    }
    // ... continue as above ...