一道pascal问题 吉祥数 ghillie

来源:百度知道 编辑:UC知道 时间:2024/06/20 14:48:22
吉祥数
(ghillie.pas/c/cpp)
[问题描述]
为了迎接圣诞,信息学兴趣小组的同学在辅导老师的带领下,举办了一个盛大的晚会,晚会的第一项内容是做游戏:猜数。老师给每位同学发一张卡片,每张卡片上都有一个编号(此编号为非负数,且小于255),每个编号互不相同。老师制定了以下的游戏规则:第一轮,每位同学将自己卡片上编号的各位数字进行平方后再相加得到一组新数,编号在这组新数中出现的同学淘汰出局,第二轮,余下的同学再将编号的各位数字进行立方相加得到一组新数,编号在这组新数中出现的同学再淘汰出局,第三轮,余下的同学再将编号的各位数字进行4次方相加得到一组新数,编号在这组新数中出现的同学再淘汰出局,……,以此类推,经过n轮后,仍留下来的同学,将获得圣诞特别礼物,卡片上的数即为2007年吉祥数。(假定班级人数不超过200人)
[输入]
输入文件ghillie .in 有两行,第1行为1个正整数n(n<8),表示有n轮游戏,第二行是卡片上互不相同的编号。
[输出]
输出文件ghillie .out是1行,为剩下来的各个吉祥数,按从小到大顺序输出,每两个数之间有一个空格。
[样例]
ghillie.in
1
24 123 2 12 20 14 4 6 36 72
ghillie.out
2 6 12 24 72 123
下面是我的程序,我不知道哪错
program ghille;
var n:byte;
a,b:array[0..256] of 0..1;
i,j:integer;
procedure reader;
var s:integer;
begin
readln(n);
while not(eoln) do
begin
read(s);
a[s]:=1;
end;
end;

procedure add(s:integer;var he:integer);

注意每次做的是一组数,要做完,不要中途删数

我们老师上周六也刚给我们发这道题目。。。
幸好我编好了,给你程序:
var i,j,n,k,l,p,s,max1,max2,max3,max,ans:longint;
a:array[1..200] of longint;
b:array[1..200] of boolean;
c:array[1..200,1..10] of longint;
d:array[1..200,1..3] of integer;
begin
assign(input,'GHILLIE.in9');
assign(output,'ghillie.ou9');
reset(input);
rewrite(output);
readln(n);
repeat
i:=i+1;
read(a[i]);
until
eoln;
s:=i;
max1:=1;max2:=1;max3:=1;
for i:=1 to s do
begin
d[i,1]:=a[i] div 100;
d[i,2]:=a[i] div 10-10*d[i,1];
d[i,3]:=a[i] mod 10;
end;
for i:=1 to n do
for j:=1 to s do
begin
for k:=1 to i+1 do
begin
max1:=max1*d[j,1];
max2:=max2*d[j,2];
max3:=max3*d[j,3];
end;
c[j,i]:=max1+max2+max3;
for l:=1 to s-