na_3_02.c

来自「For solving the following problem: "T」· C语言 代码 · 共 95 行

C
95
字号
#include <stdio.h>
#include <stdlib.h>

#define Max_size 10000 /* max number of dishes */

void Price( int n, double p[] );

 

int main()

{

    int n, i;

    double p[Max_size];

 

    while (scanf("%d", &n)!=EOF) {

       for (i=0; i<n; i++)

           scanf("%lf", &p[i]);

       Price(n, p);

       for (i=0; i<n; i++)

           printf("%.2f ", p[i]);

       printf("\n");

    }

 

    return 0;

}

 

/* Your function will be put here */

void Price( int n, double p[] )
{
	int i, j, k = 0;
	double s = 0.0;
	double m[n][4];
	
	for(i=0; i<n; i++)
	{
		m[i][0] = 0.5;
		m[i][1] = 2.0;
		m[i][2] = 0.5;
		m[i][3] = p[i];
	}
	
	for(i=0; i<n-1; i++)
	{
		s = m[i+1][0]/m[i][1];
		m[i+1][1] -= s*m[i][2];
		if(i == n-3 && i < 1)
			m[i+1][2] -= s*m[i][0];
		else m[i+1][0] = 0.0 - s*m[i][0];
		m[i+1][3] -= m[i][3]*s;
		
		if(i == n-2)
			break;
		
		s = m[n-1][2]/m[i][1];
		m[n-1][2] = 0.0 - m[i][2]*s;
		if(n == 3)
			m[n-1][0] -= m[i][2]*s;
		m[n-1][1] -= m[i][0]*s;
		m[n-1][3] -= m[i][3]*s;
		
	}
		
	for(i=n-1; i>=0; i--)
	{
		s = 0.0;
		
		if(i<n-2)
			s = m[i][0]*p[n-1] + m[i][2]*p[i+1];
		else if(i == n-2)
			s = m[i][2] * p[i+1];
			
		p[i] = (m[i][3] - s) / m[i][1];
	}
	
	return;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?