2017-11-11 155 views
0

所以我得到了这段代码。钻石形状内为输出数1至9 C++

int n; 
int m=1; 
int a=9; 

cout<<"Enter N Number = "; 
cin>>n; 

n=n*2-1; 

for(int y=1;y<=n;y++) 
{ 
    for(int x=1;x<=n;x++) 
    { 
     if(x==y+n/2 || x==y-n/2 || x==n-y+1-n/2 || x==n-y+1+n/2) 
     { 
      if(m<=9) 
      { 
       cout<<m++; 
      } 
      else if(m>9&&a>0) 
      { 
       a--; 
       cout<<a; 
      } 
     } 
     else 
     { 
      cout<<" "; 
     } 
    } 
    cout<<endl; 
} 

这就是我得到:

Diamond Shape(Fail)

而我所预期的那样没有数字“0”形状的底部,所以后打印1号的反弹怎样数2,3等

原谅我的英语不好

+0

你可以试试'ABS(M +%16-8)+1;'m是开始表格8 –

回答

-1

你希望它是这样吗? Check this out!

我可以在Pascal,C++和Java中编写代码。 PS:我也不是英语母语的人。

第一个答案:这不是最好的答案,明天下午我会改进它。

#include <iostream> 
using namespace std; 

int get() { 
    static int counter = 0; 
    static bool reverse = false; 
    !reverse ? counter++ : counter--; 
    if (counter==10 or counter==0) reverse = !reverse; 
    counter==10 ? counter = 8 : 0; 
    counter==0 ? counter = 2 : 0; 
    return counter; 
} 
int main() { 
    int number; 

    cout << "Enter N Number = "; 
    cin >> number; 
    //forward: 
    for (int i = 0; i < number; i++) { 
     for (int j = number-i-1; j > 0; j--) 
      cout << " "; 
     cout << get(); 
     if (i!=0) { 
      for (int j = 0; j < i * 2 -1; j++) cout << " "; 
      cout << get(); 
     } 
     cout << endl; 
    } 
    //backward: 
    for (int i = number-1; i > 0 ; i--) { 
     for (int j = number-i; j > 0; j--) 
      cout << " "; 
     cout << get(); 
     if (i!=1) { 
      for (int j = i * 2 -3; j > 0; j--) cout << " "; 
      cout << get(); 
     } 
     cout << endl; 
    } 
    return 0; 
} 

第二个答案:强化循环

#include <iostream> 
using namespace std; 

int nextNumber() { 
    static int counter = 0; 
    static bool reverse = true; 
    !reverse ? counter++ : counter--; 
    if (counter==-1) counter=1; 
    if (counter==9 or counter==1) reverse = !reverse; 
    return counter; 
} 
int main() { 
    int number; 
    cout << "Enter N Number = "; 
    cin >> number; 
    int space = number; 
    int middle = -3; 
    for (int row = 0; row < number*2-1; row++) { 
     if(row<number) { 
      space--; 
      middle += 2; 
     } 
     else { 
      space++; 
      middle -= 2; 
     } 
     for (int i = 0; i < space; i++) 
      cout << " "; 
     cout << nextNumber(); 
     if(row!=0 and row!=number*2-2) { 
      for (int i = 0; i < middle; i++) 
       cout << " "; 
      cout << nextNumber(); 
     } 
     cout << endl; 
    } 
    return 0; 
} 
+0

呵呵,,是啊,像这样的..你可以帮我吗?或者可能给我的代码:)对于C++ thx b4 – cHelzther

+0

我会,绝对。这看起来像一个编码挑战。 –

+0

:D好的,你可以给它......编辑你的文章也许:) – cHelzther