Pascal数的统计

数的统计
【问题描述】
在一个有限的正整数序列中,有些数会多次重复出现在这个序列中。
如序列:3,1,2,1,5,1,2。其中1就出现3次,2出现2次,3出现1次,5出现1次。
任务:对于给定的正整数序列,从小到大依次输出序列中出现的数及出现的次数。
【输入】
第一行正整数n,表示给定序列中正整数的个数。
第二行是n个用空格隔开的正整数x,代表给定的序列。
【输出】
若干行,每行两个用一个空格隔开的数,第一个是数列中出现的数,第二个是该数在序列中出现的次数。
【输入输出样例】

【数据规模和约定】
20%的数据:n<=1000;0<x<=1000,000。
50%的数据:n<=1000;0<x<=2,000,000,000。
100%的数据:n<=50,000;0<x<=2,000,000,000。

数据设计说明:
20%的数据:n<=1000;0<x<=1000,000。直接统计即可
50%的数据:n<=1000;0<x<=2,000,000,000。简单的排序后统计
100%的数据:n<=50,000;0<x<=2,000,000,000。快速排序后统计

var i,s,n:longint;
a:array[1..200000] of longint;

procedure s1(l,r:longint);
var t,mid,i,j:longint;
begin
i:=l;j:=r;
mid:=a[(i+j) div 2];
repeat
while a[i]<mid do inc(i);
while a[j]>mid do dec(j);
if i<=j then
begin t:=a[i];a[i]:=a[j];a[j]:=t;inc(i);dec(j);end;
until i>j;
if l<j then s1(l,j);
if i<r then s1(i,r);
end;

begin
assign(input,'count.in');reset(input);
assign(output,'count.out');rewrite(output);
read(n);for i:=1 to n do read(a[i]);
s1(1,n);
s:=1;
for i:=2 to n do
if a[i]=a[i-1] then inc(s)
else begin writeln(a[i-1],' ',s); s:=1; end;
write(a[n],' ',s);
close(input);close(output);
end.追问

给我解释解释呗!!

追答

就是先快排,然后扫过来,如果与前面一个数不同就输出,然后重新开始统计。

温馨提示:内容为网友见解,仅供参考
无其他回答

简单pascal编程 数的计算 杨辉三角形
第一题程序设计题目的答案是通过递归方式构造数串并统计个数。程序定义了一个名为count_number的函数,该函数接收两个参数,一个整数x和一个字符串y。函数内部通过for循环构造从1到x除以2的整数序列,并将这些整数与字符串y结合成新的字符串。同时,每构造一次新的字符串,就将统计的总数total增加一。

pascal 统计数字
这道题是NOIp 2007的复赛提高组第一题吧? 排序+线性统计的处理即可。数据规模n在200000因此O(nlogn)排序【即快排或其他高效排序法】可过。数据范围在1,500,000,000<maxlongint=2,147,483,647,所以使用高精度存储完全没有必要。qsort在一定情况下的最差表现为o(n^2)。参考程序使用了qsort。这...

数的统计 pascal
我可以先求出没有零的数,一位数中有9个数没有零,二位数中有9^2个数没有零,三位数中有9^3个数没有零……标程如下:var n,l,s,t,p:longint;m:string;begin readln(n); p:=n;str(n,m);l:=length(m);t:=1;s:=0;while n>0 do begin s:=s+(n mod 10)*t;t:=t*9;n...

Pascal数的统计
var i,s,n:longint;a:array[1..200000] of longint;procedure s1(l,r:longint);var t,mid,i,j:longint;begin i:=l;j:=r;mid:=a[(i+j) div 2];repeat while a[i]<mid do inc(i);while a[j]>mid do dec(j);if i<=j then begin t:=a[i];a[i]:=a[j];a[j]:...

pascal求纠正 编程求出所有不超过1000的数中,含有数字3的自然数,并...
最后,既然要统计个数,那么就必须输出个数,所以在end;后面加writeln(n);正确的程序是:program three;var n,m:integer;begin n:=0;for m:=1 to 999 do if (m div 100=3) or ((m-(m div 100)*100) div 10=3) or (m mod 10=3)then begin writeln(m);n:=n+1;end;writel...

pascal统计最多数字
输入一个数n(n<=200000)和n个自然数(每个数都不超过1.5*10^9),请统计出这些自然数各自出现的次数,按顺序从小到大输出。输入数据保证不相同的数不超过10000个。输入格式 Input Format 8 2 4 2 4 5 100 2 100 输出格式 Output Format 2 3 4 2 5 1 100 2 var a,b:array[1..200...

pascal 统计单词个数
可用assll码判断是不是符号,发现依次累加,注意不要是末尾的符号

pascal:统计10个自然数中,0~9这十个数字出现的次数。
count: array[0..9] of integer s: string;begin for n:=0 to 9 do count[n]:=0;for n:=1 to 10 do begin write('input number: ');readln(n);str(n, s);for i:=1 to length(s) do inc( count[ ord(s[i])-ord('0')] );end;for n:=0 to 9 do writeln(n, ...

PASCAL 求众数
1、定义数组a[0..100],用于存放输入的数据(依据数据规模定义数组大小)2、定义数数b[0..100],用于存放排序后每个数据出现的次数 3、排序 4、依次统计每个数出现的次数,并存入数组b 5、扫描数组b中最大的次数,并找到对应的a数组中的数据 6、输出结果。

pascal编程求出所有不超过1000的数中,含有数字3的自然数,并统计总数
var a,b,c,x:integer;begin for a:=0 to 9 do for b:=0 to 9 do for c:=0 to 9 do if (a=3)or(b=3)or(c=3) then begin x:=a*100*b*10*c;write(x:5);end;end.

相似回答