pascal 数字排序 10

请统计某个给定范围[L,R]的所有整数中,数字2出现的次数。比如给定范围[2,22],数字2在数2中出现了1次,在数12中出现1次,在数20中出现1次,在数21中出现1次... 请统计某个给定范围[L, R]的所有整数中,数字2 出现的次数。
比如给定范围[2, 22],数字2 在数2 中出现了1 次,在数12 中出现1 次,在数20 中出现1 次,在数21 中出现1 次,在数22 中出现2 次,所以数字2 在该范围内一共出现了6次。(1 ≤ L ≤ R≤ 10000)

输入部分:

有多组输入
输入共1 行,为两个正整数L 和R,之间用一个空格隔开。

输出部分:

对应每组输入有一行输出
输出共1 行,表示数字2 出现的次数。

输入样例:

2 22
2 100

输出样例:

6
20
请高手帮帮忙,用FREE PASCAL 谢谢,在线等!好的加分,把算法说出来也加分,不需要编,当然如果你愿意的话,我会提高分值
展开
 我来答
百度网友28b4182
2012-01-13 · TA获得超过7223个赞
知道大有可为答主
回答量:4847
采纳率:100%
帮助的人:1867万
展开全部
#include<math.h>
#include <stdio.h>
int sum[10001]={0};
int count(int n)
{
int ret=0;
while(n)
{
if(n%10==2)ret++;
n/=10;
}
return ret;
}
void main()
{
int i;
int s,t;
for(i=0;i<10001;i++)
{
sum[i]=count(i);
sum[i]+=sum[i-1];
}
while(scanf("%d%d",&s,&t)!=EOF)
{
printf("%d\n",sum[t]-sum[s-1]);
}
}
C语言,希 望对你有帮助
江户川柯南new
2012-01-13 · TA获得超过135个赞
知道答主
回答量:45
采纳率:0%
帮助的人:26.6万
展开全部
var
l,r,i,n,t:integer;
begin
while not(eof) do begin
t:=0;
readln(l,r);
for i:=l to r do begin
n:=i;
while n>0 do begin
if n mod 10=2 then inc(t);
n:=n div 10;
end;
end;
writeln(t);
end;
end.
按CTRL+C结束
while not(eof) 是到文件尾的,用于多组数据
望采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ycdfwzy
2012-01-19 · TA获得超过599个赞
知道答主
回答量:101
采纳率:0%
帮助的人:44.6万
展开全部
大哥,纯暴力啊!!!!!!!!!
算法:依次穷举每个数。每次mod 10一下,看是否等于2,是就在结果上加1,再div 10。如此循环直至此数为0。一点也不超时。
我编的程序在下(文件名自己加上):
var n,m,t,i,j,k:longint;

begin
assign(input,' '{键入文件名});reset(input);
assign(output,' '{键入文件名});rewrite(output);
while not eof do
begin
readln(n,m);
t:=0;
for i:=n to m do
begin
j:=i;
while j<>0 do
begin
k:=j mod 10;
if k=2 then inc(t);
j:=j div 10;
end;
end;
writeln(t);
end;
close(input);
close(output);
end.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
火舞旋风Wind
2012-01-15
知道答主
回答量:47
采纳率:0%
帮助的人:10.8万
展开全部
全部代码我就不写了,讲一下我的思路,希望对你有帮助。。。
function check(str:string);
var i,len:longint;
begin
len:=length(str);
for i:=1 to len do
begin
if str[i]='2' then inc(ans);//ans为答案
end;
endl
for i:=L to R do
begin
将i转成字符串形式存入str(var:string)中;
check(str);
end;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
beansb
2012-01-13 · TA获得超过148个赞
知道答主
回答量:115
采纳率:0%
帮助的人:62.5万
展开全部
这不是NOIP2011吗?
L,R,i,j,Ans:integer;

主要步骤:
Ans:=0;
For i:=L to R do
begin
j:=i;
repeat
if j mod 10=2 then inc(Ans);
j:=j div 10;
until j=0;
end;

write(Ans);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-01-14
展开全部
NOIP2011第一题

program two;
var
i,l,r,x,t:longint;
begin
assign(input,'two.in');
reset(input);
readln(l,r);
close(input);

for i:=l to r do
begin
x:=i;
repeat
if x mod 10=2 then inc(t);
x:=x div 10;
until x=0;
end;

assign(output,'two.out');
rewrite(output);
writeln(t);
close(output);
end.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式