我需要将这个形状(或类似的)用于星号:
* *
* * * *
* * * * * * *
* * * *
* *
我有点知道如何做'嵌套for循环'。我只能做一个三角形,我需要两个并排...
#include <iostream>
using namespace std;
int main()
{
cout<<"Insert A Number...\n" <<endl;
int i;
int j;
int size;
cin >> size;
for(i=1;i<size*2;i+=2)
{
cout<<endl;
for(j=(size-i)/2+1;j>=0;j--)
{
cout<<' ';
}
for(j=0;i>j;j++)
{
cout<<'$';
}
}
cin.get();
return 0;
}
答案 0 :(得分:1)
一些观察可以帮助您:
例如,给定N为10:
第1行有1个星号,10 - 1个空格,10 - 1个空格,1个星号
2号线有2个星号,10 - 2个空格,10 - 2个空格,2个星号
3号线有3个星号,10-3个空格,10-3个空格,3个星号
4号线有4个星号,10-4个空格,10-4个空格,4个星号
// ...
11号线有9个星号,10-9个空格,10-9个空格,9个星号
12号线有8个星号,10-8个空格,10-8个空格,8个星号
13号线有7个星号,10-7个空格,10-7个空格,7个星号。
看到任何模式?
答案 1 :(得分:0)
您的代码会打印一个顶部为峰值的三角形。你想要的是一个横向三角形 - 实际上是其中两个。要弄清楚如何做到这一点,请在纸上完成一个例子。
如果您在上面显示,假设输入为3
,您将如何打印每一行?
获取每一方星数的简便方法是从1
计算到3
,然后从2
倒计时到1
。现在你只需要计算每行的空格数。还有最长线中心的孤星问题,这意味着你必须单独处理这条线。
当用户输入3
时,下面的程序会准确打印出您在问题中显示的输出。请注意我如何定义一对辅助函数repeat()
和printRow()
,以避免多次编写相同的代码。
#include <iostream>
#include <string>
using namespace std;
void repeat(int n, string s) {
for (int i = 0; i < n; ++i) {
cout << s;
}
}
void printRow(int size, int i) {
repeat(i, "* ");
repeat(2*(size-i)+1, " ");
repeat(i-1, "* ");
cout << "*" << endl;
}
int main() {
cout << "Enter a number:" << endl;
int size;
cin >> size;
for (int i = 1; i < size; ++i) { // Rows of increasing length.
printRow(size, i);
}
repeat(2*size, "* "); // Middle row.
cout << "*" << endl;
for (int i = size-1; i >= 1; --i) { // Rows of decreasing length.
printRow(size, i);
}
return 0;
}
答案 2 :(得分:0)
考虑一下如何逐行,而不是从左到右思考,如果你要用于循环。
答案 3 :(得分:0)
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
cout << "Insert A Number...\n" << endl;
int size;
cin >> size;
int user_rows = size;
int user_cols = ceil(user_rows / 2.0)*2;
for (int row = 1; row <= user_rows; row++) { //print each row of asterisks
int asterisksPerSide = (row * 2 <= user_rows) ? row : user_rows - row + 1;
int spacesTotal = user_cols - (2 * asterisksPerSide);
for (int asterisksPrinted = 0; asterisksPrinted < asterisksPerSide; asterisksPrinted++) { //print first part of row
cout << "*";
}
for (int spacesPrinted = 0; spacesPrinted < spacesTotal; spacesPrinted++) { //print spaces
cout << " ";
}
for (int asterisksPrinted = 0; asterisksPrinted < asterisksPerSide; asterisksPrinted++) { //print last part of row
cout << "*";
}
cout << endl;
}
}