pascal 阅读程序

pascal 阅读程序,第1张

Program ex303

Const

NN=7//NN的值

Type

Arr1=array[0..30] of char

var

s:arr1

k,p:integer

Function fun(s:arr1a:charn:integer):integer

var

j:integer

begin

j:=n{j被赋成7,指向数组末尾}

while (a<s[j])and(j>0) do dec(j){如果查找字母比s[j]这个字母小,就把j减1,循环直到查找字母比s[j]大或等于,或者j=0}

fun:=j{返回j的值}

end

begin

for k:=1 to NN do

s[k]:=chr(ord('A')+2*k+1){s[k]被赋成ASCII码为(字母A的ASCII码+2*k+1)的字母,执行完应是这样的 s=(D,F,H,J,L,N,P)}

k:=fun(s,'M',NN){利用函数查找M按字母表顺序排列应在s数组中的位置}

writeln(k){输出这一位置}

end.

const SIZE=10

var

i,j,cnt,n,m:integerdata:array[1..SIZE] of integer

begin

readln(n,m)

for i:=1 to n do read(data[i])

for i:=1 to n do

begin

cnt:=0for j:=1 to n do if (data[i]<data[j]) or ((data[j]=data[i]) and (j<i)) then inc(cnt)

if cnt=m then writeln(data[i])

end

end.

首先5-6行读入数据

n=5, m=2, data[1]=96, data[2]=-8, data[3]=0, data[4]=16, data[5]=87

对于7-11行的循环

先看10行的条件 条件要求在data[i]<data[j] 或 (i<j 且 data[i]=data[j])

也就是data[i]与每个数比较 data[i]较小 或者相同时输入顺序靠前(与自己比较时不符合i<j)

于是到11行时 cnt表示 i=某值时 满足条件的个数

也就是说 当满足条件的个数=m时 输出data[i]

可以发现 data[i]为第m+1大的数

也就是输出 第m+1大的数 数字相同时输入顺序靠后的数被认为较大(当然了不会影响答案)

答案就是第3大的数 也就是16了

(不过我觉得像这种不太复杂的题直接全部代入数据一步一步想就差不多了)

P.S.我是新手 没考过竞赛 以上纯属个人思路


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8028591.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-12
下一篇2023-04-12

发表评论

登录后才能评论

评论列表(0条)

    保存