如何在数组中存储此类数据

时间:2015-01-21 16:04:17

标签: c

输入由多行组成。 第一行包含一个数字n,表示Pascal三角形中的行数将为n + 1。 第二行包含一个数字m,表示要在Pascal三角形上执行的事务数。每笔交易都在一个单独的行中给出。事务是以空格分隔的整数列表。每个列表中的第一个整数表示行号,比如R,列表中的其余整数表示行R中的值的索引。对于每个事务,您必须计算给定行R中给定系数的总和。 。 示例:输入将以以下格式给出:

5
3
3 1 2
5 1 1 1 4
4 2 3 2

应该怎么做才能存储过渡行的值

3 1 2
5 1 1 1 4
4 2 3 2

在单个数组变量下。因此它可以完全传递给函数。

2 个答案:

答案 0 :(得分:1)

如果你制作这样的结构,你可以做你想做的事。您可以将结构传递给函数来计算每行的总和。

struct pascaltirangle
{
  int size;          //The no of lines
  int* no_transactions; //To store no of transactions of each line
  int** contents;    //To store contents of each line. No of contents in line determined by transaction[i]
} dat;

//code to take input of size

dat.no_transactions=(int*)malloc(sizeof(int) * (dat.size+1));

//code to take no of transaction for each line

for(int i=0;i<=dat.size;i++)
    contents[i]=malloc(sizeof(int)*dat.no_transaction[i]);      

//code to take input for contents[i][j] 

答案 1 :(得分:0)

它只是使用递归函数添加一行的所有事务。

 #include <stdlib.h>
#include <stdio.h>

int add_transaction(int *contents,int size)
{
   if(!size)
     return 0;
   return (*contents + add_transaction(contents+1,size-1));

}

void main()
{

  int size;             //The no of lines
  int* no_transaction;  //To store no of transactions of each line
  int** contents;       //To store contents of each line. No of contents in line determined by transaction[i]

  int c1,c2;
  printf("Give size of triangle :");
  scanf("%d",&size);

  no_transaction=(int*)malloc(sizeof(int) * (size+1));
  contents=(int**)malloc(sizeof(int)*(size+1));
  for(c1=0;c1<=size;c1++)
  {
     printf("\nGive no of transaction for line no %d :",c1+1);
     scanf("%d",no_transaction+c1);
     contents[c1]=(int*)malloc(sizeof(int)*no_transaction[c1]);
     for(c2=0;c2<no_transaction[c1];c2++)
     {
        printf("\tFor line %d give transaction no %d :",c1+1,c2+1);
        scanf("%d",contents[c1]+c2);
     }
  }
  printf("\nThe sum of the series is :");
  for(c1=0;c1<=size;c1++)
  {
     if(c1)
      printf("+ %d ",add_transaction(contents[c1],no_transaction[c1]));
     else
      printf(" %d",add_transaction(contents[c1],no_transaction[c1]));
  }

 //Code to free the allocated memory.
}