• 打印杨辉三角的几种方法


    下面代码仅供本人复习所用,实用性N低,各位飘过吧~~哈哈:>

    //
    // 杨辉三角. 
    //
    // 杨辉三角除每行第一个元素和最后一个原始均为 1 外,
    // 其他元素等于它上面左右两边的元素之和. 
    // 
    
    #include <cstdlib>
    #include <iostream>
    #include <iomanip>
    #include <stdexcept>
    #include <ctime>
    
    const size_t ROWS = 10;
    
    //
    // 二维数组法. 
    //
    void pascalTriangle_array(unsigned long (*array)[ROWS], const size_t rows)
    {
    	for (size_t i = 0; i < rows; ++i) {
    		array[i][0] = array[i][i] = 1;
    	}
    	for (size_t i = 2; i < rows; ++i) {
    		for (size_t j = 1; j < i; ++j) {
    			array[i][j] = array[i - 1][j - 1] + array[i - 1][j];
    		}
    	}
    }
    
    //
    // 一维列表法. 
    //
    void pascalTriangle_list(unsigned long *list, const size_t rows)
    {
    	unsigned long *pCurrRow, *pPrevRow;
    	
    	for (size_t i = 0; i < rows; ++i) {
    		pCurrRow = list + i * (i + 1) / 2;
    	 	*pCurrRow = *(pCurrRow + i) = 1;
    	}
    	for (size_t i = 2; i < rows; ++i) {
    		pPrevRow = list + (i - 1) * i / 2;
    		pCurrRow = list + i * (i + 1) / 2;
    		for (size_t j = 1; j < i; ++j) {
    			*(pCurrRow + j) = *(pPrevRow + j - 1) + *(pPrevRow + j);
    		}
    	}
    }
    
    
    double factorial(int n)
    {
    	double result = n;
    
    	while (0 < --n) {
    		result *= n;
    	}
    	return result > 0 ? result : 1;
    }
    
    //
    // 数学公式法. 
    //
    // 单项公式: n! / ((n-1)! * n!) 
    //
    unsigned long pascalTriangle_fomula(const unsigned int row, 
    									const unsigned int col)
    {
    	if (row < col) {
    		throw std::invalid_argument("pascalTriangle_fomula()");
    	}
    	return factorial(row) / (factorial(row - col) * factorial(col));
    }
    
    
    //
    // 测试. 
    //
    int main(void)
    {
    	//
    	// 数组方法. 
    	//
    	unsigned long triangle[ROWS][ROWS];
    
    	pascalTriangle_array(triangle, ROWS);
    	
    	for (size_t i = 0; i < ROWS; ++i) {
    		for (size_t j = 0; j <= i; ++j) {
    			std::cout << std::left << std::setw(4) << triangle[i][j];
    		}
    		std::cout << std::endl;
    	}
    	
    	//
    	// 列表方法. 
    	//	
    	unsigned long list[(1 + ROWS) * ROWS / 2];
    	unsigned long * pRow;
    	
    	pascalTriangle_list(list, ROWS);
    	
    	for (size_t i = 0; i < ROWS; ++i) {
    		pRow = list + i * (i + 1) / 2;
    		for (size_t j = 0; j <= i; ++j) {
    			std::cout << std::left << std::setw(4) << *(pRow + j);
    		}
    		std::cout << std::endl;
    	}
    	
    	//
    	// 公式方法. 
    	//
    	for (size_t i = 0; i < ROWS; ++i) {
    		for (size_t j = 0; j <= i; ++j) {
    			std::cout << std::left << std::setw(4) << pascalTriangle_fomula(i, j);
    		}
    		std::cout << std::endl;
    	}
    	
    	return EXIT_SUCCESS;
    }
    
  • 相关阅读:
    ASP.NET Web API 2 框架揭秘
    跨境之二 对外服务接口接收订单数据(跨境通关申报系统)
    关于程序员的59条搞笑但却真实无比的编程语录
    linux终端常用快捷键
    [ json editor] 如何在网页中使用Json editor 插件
    【简洁之美】裴波那切数列生成器 python
    python 实现树结构的打印
    windows python文件拷贝到linux上执行问题
    python 中变量的命名方法
    <select> 标签使用
  • 原文地址:https://www.cnblogs.com/wxxweb/p/2066025.html
Copyright © 2020-2023  润新知