C++编程题:试定义一个类Array,将二维数组的各行按其各行上的元素依次拼接后得到的整数的大小升序排列。

如题所述

#include <stdio.h>
struct sumnote   //建立一个结构体,方便排序,用于记录行数。
{
 int data;    //求和的数据。
 int line;    //记录函数,用于输出。
};
class array      //类array
{
public:
 array(int m,int n)
 {
  row=m;
  column=n;
 }
 void create()
 {
  int i=0;
  matrix = new int* [row];
  for(i=0;i<row;i++)
  {
   matrix[i] = new int [column];
  }
  sumarray = new sumnote[row];
  for(i=0;i<row;i++)
  {
   sumarray[i].data = 0;
  }
  inorderarray = new int[row];
  for(i=0;i<row;i++)
  {
   inorderarray[i] = 0;
  }
 }
 void input()
 {
  printf("input the elements:\n");
  for(int i=0;i<row;i++)
  {
   for(int j=0;j<column;j++)
   {
    scanf("%d",&matrix[i][j]);
   }
  }
 }
 void sum()
 {
  for(int i=0;i<row;i++)
  {
   int a=1;
   sumarray[i].line=i;
   for(int j=column-1;j>=0;j--)
   {
    sumarray[i].data += matrix[i][j]*a;
    if(matrix[i][j]<10) a = 10*a;
    else if(matrix[i][j]<100) a=100*a;
    else a=1000*a;   //假设矩阵元素小于1000.
   }
  }
 }
 void inorder()
 {
  sumnote temp;
  for(int i=0;i<row;i++)
  {
   for(int j=i+1;j<row;j++)
   {
    if(sumarray[i].data>sumarray[j].data)
    {
     temp=sumarray[i];
     sumarray[i]=sumarray[j];
     sumarray[j]=temp;
    }
   }
  }
 }
 void output()
 {
  printf("\n\n");
  printf("sum of row :\n");
  for(int k=0;k<row;k++)
  {
   printf("%d\n",sumarray[k].data);
  }
  printf("\n\n");
  for(int i=0;i<row;i++)
  {
   int k=sumarray[i].line;
   for(int j=0;j<column;j++)
   {
    printf("%d ",matrix[k][j]);
   }
   printf("\n");
  }
 }

private:
 int **matrix;
 int row;
 int column;
 sumnote *sumarray;
 int *inorderarray;
};
int main()    //主程序,main函数
{
 printf("input the sixe of matrix\n");
 int row=0,column=0;
 scanf("%d%d",&row,&column);
 array matrix(row,column);
 matrix.create();
 matrix.input();
 matrix.sum();
 matrix.inorder();
 matrix.output();
 return 0;
}

温馨提示:答案为网友推荐,仅供参考
相似回答