各位猛男早上好.题目是这样的:排序打印出类似这样的图形
1 3 6
2 5 8
4 7 9 
我的算法是这样的,不过错误好多,但不知怎么改.请猛男给个完整的,正确的代码,再帮我点评点评.代码如下:
#include <iostream>
using namespace std;
void mm(int n,int aa[n]);
main()
{
cin>>n;
int sum=0 ;
int aa[n];
for(m=1;m<=n;m++)
{
sum=sum+n;

aa[m-1]=sum;
}; mm(n,aa[n]);
return 0;
};
void mm(int n,int aa[n])
{
int bb[n];
for(k=0;k<=n-1;k++)
{
if (k=n-1)
{
bb[n-1]=aa[n-1]+n-1;
cout<< aa[n-1]+n-1<<endl;
}
bb[k]=aa[k+1]-1;
cout<<aa[k+1]-1;
}
if (n-1==1)
break;
return mm(n--,bb[n]);
};

解决方案 »

  1.   

    // 123max.cpp : Defines the entry point for the console application.
    //#include "stdafx.h"#include <iostream.h>const int N_MAX = 50;void MakeSquareArray(int *arr, int nn)
    {
    int i=1;
    int m=0,n=0; while (m<nn) // 左上半段
    {
    for (n=0; m>=0; n++,m--,i++)
    {
    *(arr+m*N_MAX+n) = i;
    }
    m = n;
    }
    int ii = nn*nn;
    while (m>0) //右下半段
    {
    for (n=nn-1; m<nn; n--,m++,ii--)
    {
    *(arr+m*N_MAX+n) = ii;
    }
    m = n;
    }
    }int main(int argc, char* argv[])
    {
    int n = -1;
    cin>>n; if (n>0 && n<N_MAX)
    {
    int arr[N_MAX][N_MAX] = {0}; MakeSquareArray(&arr[0][0],n); printf("square:\n");
    for (int i=0; i<n;i++)
    {
    for (int j=0; j<n; j++)
    {
    printf("%d\t",arr[i][j]);
    }
    printf("\n");
    }

    else
    {
    printf("\n1~%d\t!\n",N_MAX);
    } return 0;
    }