我要打印以下图案

时间:2019-09-11 05:21:51

标签: c++

    1
    3 2
    6 5 4
    10 9 8 7

我要打印以下图案。我已经尽力了,但无法为此编写代码。我已经尝试了所有想到的方法。

#include<iostream>

using namespace std;

int main() {
  int i, j, n;
  cin >> n;
  int k = 0;
  for (i = 1;i <= n; i++) {
    for (j = 1; j <= i; j++) {
      k++;
      printf("%d ", k);
    }
    printf("\n");
  }
}

我尝试过的其他代码是这个。

#include<iostream>

using namespace std;

int main() {
  int i, j, n;
  cin >> n;
  int k = 0;
  for (i = 1; i <= n; i++) {
    for (j = i; j >= 1; j--) {
      k++;
      printf("%d ",j);
    }
    printf("\n");
  }
}

6 个答案:

答案 0 :(得分:0)

#include<iostream>

void printPattern(unsigned numlevels)
{
  unsigned last_num = 1;
  for(unsigned i = 0; i < numlevels; ++i)
  {
    unsigned next_num = i + last_num;
    for(unsigned j = next_num; j >= last_num; --j)
    {
      std::cout << j << ' ';
    }
    std::cout << '\n';
    last_num = next_num + 1;
  }
}
int main()
{
  unsigned n;
  std::cin >> n;
  printPattern(n);
  return 0;
}

答案 1 :(得分:0)

您也可以使用堆栈来实现此目的。这是一个可行的答案:

#include <iostream>
#include <stack>

using namespace std;

int main() {
  int i, j, n;
  stack<int> st;
  cin >> n;
  int k = 0;
  for(i = 1;i <= n; i++) {
    for(j = 1; j <= i; j++) {
      k++;
      st.push(k);
    }
    while(!st.empty()){
      printf("%d ", st.top());
      st.pop();
    }
    printf("\n");
  }
}

希望有帮助!

答案 2 :(得分:0)

在阅读代码打击之前,您应该真正尝试自己做。这个问题显然对于实践和开发编程肌肉来说是很重要的。仅获得答案将无济于事。 代码的问题在于,对于每一行,您要打印的范围都没有正确确定。您应该首先找到范围,然后打印数字。这可以是多种方法。下面是其中之一。

for(i=1;i<=n;i++){ 
    int max = i*(i+1)/2;
    int min = i*(i-1)/2 + 1;
    for(j=max;j>=min;j--){ 
        printf("%d ",j); 
    } 
    printf("\n"); 
}

答案 3 :(得分:0)

这是一种简单的方法

int main(int argc, char* argv[])
{
    int n = 4; // suppose print 4 lines
    for (int i = 1; i <= n; ++i)
    {
        int i0 = (i + 1) * i / 2;  // first number of line i
        for (int j = 0; j < i; j++)
            cout << i0 - j << " ";
        cout << endl;
    }
    return 0;
}

答案 4 :(得分:0)

#include <iostream>
#include <stack>

using namespace std;

int main()
{

int previousRow = 0;
for(int row = 1; row <= 4; row++)
{
    int rowTracker = row;

    for(int col = 0; col < row; col++)
    {
        cout<<rowTracker - col + previousRow<<" ";
    }
    previousRow += row;
    cout<<endl;
}
return 0;
}

答案 5 :(得分:0)

感谢大家的回应。我能够自己做。以下是我的工作。如果有任何更正,请通知我

#include<iostream>
using namespace std;
int main(){
    int i,j,n,temp;
    cin>>n;
    int k=0;
    for(i=1;i<=n;i++){
        k=k+i,temp=k;
        for(j=1;j<=i;j++){
           cout<<temp<<+"  ";
           temp--;

    }

            cout<<("\n");
    }
}