pascal题目现在给你N个0~9的数字并排成一列,同时还给出了一个取数长度L.规定先从第一个数字开始从左往右连续取L个数字,拼成一个产度为L位(最高位为0的L-1位数除外)的数,然后从第2个数字
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/28 10:21:02
![pascal题目现在给你N个0~9的数字并排成一列,同时还给出了一个取数长度L.规定先从第一个数字开始从左往右连续取L个数字,拼成一个产度为L位(最高位为0的L-1位数除外)的数,然后从第2个数字](/uploads/image/z/3945645-45-5.jpg?t=pascal%E9%A2%98%E7%9B%AE%E7%8E%B0%E5%9C%A8%E7%BB%99%E4%BD%A0N%E4%B8%AA0%7E9%E7%9A%84%E6%95%B0%E5%AD%97%E5%B9%B6%E6%8E%92%E6%88%90%E4%B8%80%E5%88%97%2C%E5%90%8C%E6%97%B6%E8%BF%98%E7%BB%99%E5%87%BA%E4%BA%86%E4%B8%80%E4%B8%AA%E5%8F%96%E6%95%B0%E9%95%BF%E5%BA%A6L.%E8%A7%84%E5%AE%9A%E5%85%88%E4%BB%8E%E7%AC%AC%E4%B8%80%E4%B8%AA%E6%95%B0%E5%AD%97%E5%BC%80%E5%A7%8B%E4%BB%8E%E5%B7%A6%E5%BE%80%E5%8F%B3%E8%BF%9E%E7%BB%AD%E5%8F%96L%E4%B8%AA%E6%95%B0%E5%AD%97%2C%E6%8B%BC%E6%88%90%E4%B8%80%E4%B8%AA%E4%BA%A7%E5%BA%A6%E4%B8%BAL%E4%BD%8D%EF%BC%88%E6%9C%80%E9%AB%98%E4%BD%8D%E4%B8%BA0%E7%9A%84L-1%E4%BD%8D%E6%95%B0%E9%99%A4%E5%A4%96%EF%BC%89%E7%9A%84%E6%95%B0%2C%E7%84%B6%E5%90%8E%E4%BB%8E%E7%AC%AC2%E4%B8%AA%E6%95%B0%E5%AD%97)
pascal题目现在给你N个0~9的数字并排成一列,同时还给出了一个取数长度L.规定先从第一个数字开始从左往右连续取L个数字,拼成一个产度为L位(最高位为0的L-1位数除外)的数,然后从第2个数字
pascal题目现在给你N个0~9的数字并排成一列,同时还给出了一个取数长度L.
规定先从第一个数字开始从左往右连续取L个数字,拼成一个产度为L位(最高位为0的L-1位数除外)的数,然后从第2个数字开始从左往右连续取L个数字.,这样,最后最多可以得到N-L+1个L位数.现在请你将这些L位数中的素数按才能够小到大的顺序输出(如果产生重复,只需要输出一个).
pascal题目现在给你N个0~9的数字并排成一列,同时还给出了一个取数长度L.规定先从第一个数字开始从左往右连续取L个数字,拼成一个产度为L位(最高位为0的L-1位数除外)的数,然后从第2个数字
program number;
//By 灰天飞雁 htfy96@qq.com 转载请保留此行
{
TestData:
Input:
12
6 6 5 3 6 5 3 1 6 1 4 1
3
Output:
653
}
Var
a:array[0..1000] of byte; //存储n个数字
t:array[0..1000] of qword; //存储取出的n-l+1个数中是质数的
n,i,l,top,j:longint;
now,w,y:qword;
Function iszhi(P:qword):boolean;inline;//判断一个数是否为质数
var
i:longint;
begin
for i:=2 to trunc(sqrt(p)) do
if p mod i=0 then exit(false);
exit(true);
end;
procedure check(P:qword);inline; //检查一个数是否为质数,若是则将其加入T中
begin
if iszhi(P) then
begin
inc(top);
t[top]:=p;
end;
end;
begin
top:=0; //top:T数组的栈顶
readln(n);
for i:=1 to n do
read(a[i]);
readln;
readln(l);
now:=0;//now 存储的是当前处理的长度为l的数
w:=1; //w代表当前处理那一位的权值
for i:=l downto 1 do
begin
now:=now+a[i]*w;
w:=w*10;
end; //这一部分是计算第1~L位的那个数字的
w:=w div 10; //最高位的权值在最后多乘了一个10
check(now); //检查第一个数
for i:=l+1 to n do //i代表了当前处理数的最后一位.当前处理数=前一个数除掉首位(mod w) *10 +当前这一位的数字(+a[i])
begin
now:=now mod w;
now:=now*10+a[i];
check(now);
end;
for i:=1 to top-1 do//数据不多就冒泡了……
for j:=i+1 to top do
if t[i]>t[j] then
begin
y:=t[i];
t[i]:=t[j];
t[j]:=y;
end;
for i:=1 to top do
if (t[i]<>t[i-1]) or (i=1) then //去重
writeln(t[i]);
readln
end.