我需要打印这个三角形:
*
**
***
****
*****
******
*******
********
使用FOR和WHILE循环。我需要帮助,我已经想出了for循环版本我只需要将它转换为while循环,但我尝试的一切都没有给我正确的输出!任何帮助表示赞赏!
到目前为止我的代码:
#include <iostream>
using namespace std;
int main(int argc, char**argv) {
int i = 1;
int j = 1;
int N = 8;
while (i <= N)
{
i = i++;
while(j <= i)
{
cout<<"*";
j = j++;
}
cout<<endl;
}
}
答案 0 :(得分:3)
我会给你一个提示(为了让你自己弄清楚):你忘了在内循环之后将j
设置回1
。
就像现在一样,当j
变为<= i
一次时,它会保持这种状态,并且永远不会再输入内部循环。
此外,虽然它与您的问题没有直接关系,但请确保从不执行j = j++
或i = i++
;只需j++
和i++
(正如Kshitij Mehta在评论中所说)。如果您对原因感兴趣,可以read this question and its answers。
答案 1 :(得分:1)
我也会给你一个提示:i = i++;
没有按照你的想法做到。
答案 2 :(得分:1)
有什么规则?
while (1)
{
cout << "*" << '\n';
cout << "**" << '\n';
cout << "***" << '\n';
cout << "****" << '\n';
cout << "*****" << '\n';
cout << "******" << '\n';
cout << "*******" << '\n';
cout << "********" << '\n';
break;
}
答案 3 :(得分:0)
我看不到你的三角形,但我认为你需要在j上的每个循环之前将j设置为1:
while (i <= N)
{
i++;
j = 1;
while(j <= i)
{
cout<<"*";
j++;
}
cout<<endl;
}
答案 4 :(得分:0)
我真的不知道如何使它更简洁:
#include <iostream>
#include <sstream>
int main()
{
std::stringstream ss;
int i = 10;
while (i--)
std::cout << (ss<<'*', ss).str() << std::endl;
}
或循环,减少一行
for(int i=10; i--;)
std::cout << (ss<<'*', ss).str() << std::endl;
如果你不介意一些效率较低的代码:
#include <iostream>
int main() { for(int i=1; i<10; std::cout << std::string(i++, '*') << std::endl); }
答案 5 :(得分:-1)
#include <iostream>
using namespace std;
int main()
{
int i, j, N=7;
while(i <= N)
{
i++;
j = 1;
while(j <= i)
{
cout << "*";
j++;
}
cout << endl;
}
}