pascal题目

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pascal题目相关的知识,希望对你有一定的参考价值。

type num=array[0..400]of integer;
function jia(a,b:num):num;
var c:num;
i,j,k,l:integer;
begin
fillchar(c,sizeof(c),0);
if a[0]>b[0] then l:=a[0] else l:=b[0];
k:=0;
for i:=1 to l do
begin
c[i]:=a[i]+b[i];
k:=c[i] div 10;
c[i]:=c[i] mod 10;
end;
c[0]:=l;
if k>0 then begin
c[0]:=l+1;
c[l+1]:=k;
end;
end;
var a:array[1..1000]of num;
i,j,x:integer;
begin
readln(x);
a[1,1]:=2;a[1,0]:=1;
a[2,1]:=3;a[2,0]:=1;
for i:=3 to x do
a[i]:=jia(a[i-1],a[i-2]);
for i:=a[x,0] downto 1 do writeln(a[x,i]);
end.

高精度斐波那契数列不解释。。追问

不对

追答

额不好意思一个忘记加了
type num=array[0..400]of integer;
function jia(a,b:num):num;
var c:num;
i,j,k,l:integer;
begin
fillchar(c,sizeof(c),0);
if a[0]>b[0] then l:=a[0] else l:=b[0];
k:=0;
for i:=1 to l do
begin
c[i]:=a[i]+b[i];
k:=c[i] div 10;
c[i]:=c[i] mod 10;
end;
c[0]:=l;
if k>0 then begin
c[0]:=l+1;
c[l+1]:=k;
end;
jia:=c;
end;
var a:array[1..1000]of num;
i,j,x:integer;
begin
readln(x);
a[1,1]:=2;a[1,0]:=1;
a[2,1]:=3;a[2,0]:=1;
for i:=3 to x do
a[i]:=jia(a[i-1],a[i-2]);
for i:=a[x,0] downto 1 do writeln(a[x,i]);
end.

追问

程序输出有误

追答

type num=array[0..400]of integer;
function jia(a,b:num):num;
var c:num;
i,j,k,l:integer;
begin
fillchar(c,sizeof(c),0);
if a[0]>b[0] then l:=a[0] else l:=b[0];
k:=0;
for i:=1 to l do
begin
c[i]:=a[i]+b[i]+k;
k:=c[i] div 10;
c[i]:=c[i] mod 10;
end;
c[0]:=l;
if k>0 then begin
c[0]:=l+1;
c[l+1]:=k;
end;
jia:=c;
end;
var a:array[1..1000]of num;
i,j,x:integer;
begin
readln(x);
a[1,1]:=2;a[1,0]:=1;
a[2,1]:=3;a[2,0]:=1;
for i:=3 to x do
a[i]:=jia(a[i-1],a[i-2]);
for i:=a[x,0] downto 1 do write(a[x,i]);
writeln;
end.

我说LZ你就一点都不懂吗。。连个高精度加法进位没写都看不出来吗
你就这么懒不想排错吗,我说如果你真的这样你还是别学这个了。。

参考技术A o

118. Pascal's Triangle

题目:

Given numRows, generate the first numRows of Pascal‘s triangle.

For example, given numRows = 5,
Return

[
     [1],
    [1,1],
   [1,2,1],
  [1,3,3,1],
 [1,4,6,4,1]
]

链接:  http://leetcode.com/problems/pascals-triangle/

一刷,这道题简单却解得并不好。

  1. 首先问题是numRows和range(N)时上限的考虑,因为range从0开始,所以要range(numRows - 1)
  2. list.reverse()是in place的,reversed(list)返回值是新的 list
  3. cur = cur.extend(second_half)返回的是None!!! cur.extend(second_half)就够了,这种错误平时根本不可能犯,太低级
  4. numRows == 1是否作为特殊例子返回

有一个总结似乎可以避免4),经常我会用prev, cur两个list,如果只用一个的话似乎可以少判断一次边界情况

 1 class Solution(object):
 2     def generate(self, numRows):
 3         if numRows == 0:
 4             return []
 5         if numRows == 1:
 6             return [[1]]
 7         result = [[1]]
 8         prev = [1]
 9         cur = []
10         
11         for row in range(numRows - 1):
12             cur.append(1)
13             for idx in range(row / 2):
14                 cur.append(prev[idx] + prev[idx + 1])
15             second_half = reversed(cur)
16             if row % 2:
17                 cur.append(prev[row / 2] + prev[row / 2 + 1])
18             cur.extend(second_half)
19             result.append(cur)
20             prev, cur = cur, []
21         return result

 

以上是关于pascal题目的主要内容,如果未能解决你的问题,请参考以下文章

pascal 教程

119. Pascal's Triangle II

求助-PASCAL题目10道

NOIP2006(pascal)普及初赛问题!急!!!!!

118.Pascal's Triangle

119.Pascal's Triangle II