pascal问题 求符合条件的数 查错啊,高手们
作者&投稿:居浅 (若有异议请与网页底部的电邮联系)
program pii;
var
i:integer;
s,pi:real;
begin
pi:=1;
for i:=1 to 500do
begin
s:=((2*i)/(2*i-1))*((2*i)/(2*i+1));
pi:=pi*s;
end;
pi:=pi*2;
write(pi:3:2);
readln;
end.
当一个数字中有多个 5时,被 重复计数了。修改如下:
var
n,x,t,i,j:longint;
s,x1:string;
begin
read(n);
for i:=1 to n do
begin
str(i,s);
for j:=1 to length(s) do
if s[j]='5' then
if i mod 5=0 then begin t:=t+1; break end;
end;
writeln(t);
end.
其它部分好像没有什么问题。
题目好像也有问题。
为什么输入描述中说只输入一个整数,而样例和题目都是有两个整数?
读入部分应该改成readln(a,b);
然后i循环改成for i:=a to b do
应该就可以了。
会不会超时啊 ??
var n,m,i:longint;
s:string;
function check(x:string):boolean;
var k,i:longint;
f:array[0..10] of boolean;
begin
check:=true;
if length(x)<>7 then begin check:=false;exit; end;
fillchar(f,sizeof(f),0);
for i:=1 to 7 do
begin
k:=ord(x[i])-ord('0');
if not f[k] then f[k]:=true else exit(false);
end;
end;
begin
readln(n,m);
for i:=n to m do
begin
str(i*i,s);
if check(s) then writeln(i);
end;
end.
你修改后的程序在我这是对的
运行结果是共有123个解:(应该对吧?)
1017 1023 1024 1027 1028 1036 1037 1042 1113 1117
1164 1175 1176 1197 1228 1267 1268 1277 1302 1307
1323 1328 1343 1352 1355 1375 1395 1405 1428 1433
1441 1442 1444 1463 1541 1593 1594 1628 1646 1648
1701 1706 1746 1791 1816 1866 1873 1896 1903 1921
1936 1949 1953 1964 1976 1991 1996 2013 2027 2069
2095 2123 2126 2175 2199 2203 2277 2301 2304 2311
2321 2322 2326 2339 2382 2396 2401 2414 2439 2493
2507 2509 2527 2528 2529 2547 2552 2553 2557 2595
2599 2618 2672 2684 2686 2699 2701 2711 2727 2731
2801 2802 2821 2825 2866 2882 2884 2905 2911 2927
2929 2931 2945 2984 2992 3018 3041 3042 3059 3094
3105 3111 3142
不是对的吗?
赵乖欧普:[答案] program ques_1; var i,j,k:integer; begin for i:=1 to 9 do for j:=0 to 9 do for k:=0 to 9 do if i*i*i+j*j*j+k*k*k=100*i+10*j+k then writeln(i,j,k); end. program ques_2 var i,a,b,c,d,n:integer; begin fo...
武汉市19276704714: pascal编程题:求出满足下列条件的三位数:它除以11所得的商等于它各个数位之和(用for循环语句) - ?
赵乖欧普: Var i,a,b,c:integer; begin for i:=100 to 999 do begin a:=i div 100; b:=i mod 100 div 10; c:=i mod 10; if i div 11=a+b+c then write(i,' '); end; readln; end.
武汉市19276704714: 用Pascal编程求满足下列条件的三位数:该三位数等于它数字的立方和.?
赵乖欧普: 这是水仙花数= =,淳 啊 var i,j,k:longint; begin for i:=0 to 9 do for j:=1 to 9 do for k:=1 to 9 do if i*i*i+j*j*j+k*k*k=i*100+j*10+k then writeln(i*100+j*10+k); end.
武汉市19276704714: pascal题,求解! - ?
赵乖欧普: 楼上的太烦了这类题根本用不着排列组合八位二进制 一个256种要么有偶数个1 要么有奇数个1各占一半 没错吧所以一共 256/2=128个 标准答案128 以下是今年的标准答案NOIP2011普及组初赛(Pascal)...
武汉市19276704714: (用pascal)输入一个实数m,计算并输出满足条件1+1∕2+1∕3+…+1∕n〉m的n值.(满足条件的n的最小值) - ?
赵乖欧普: var n:integer;s,m:real; begin s:=0; n:=0; read(m); repeat n:=n+1; s:=s+1.0/n; until (s>m); writeln('n=',n); end.
武汉市19276704714: 方程解的个数 pascal 已知x,y满足如下条件: ax+by+c=0 ; x1<= x<=x2 ; y1<= y<=y2 ; x,y均为整数. - ?
赵乖欧普: ax+by+c=0 ax=-c-by x=-(c+by)/a 因为x是整数,(c+by)能被a整除 同理(c+ax)能被b整除 通过合理的剪枝来优化时间 x必定是两个等差数列 只需求出x1到x2中的首项、末项和公差,就可求出其中有几个符合(c+ax)能被b整除 y也是一样 不过要考虑的是x和y要同时符合,(c+by)能被a整除和(c+ax)能被b整除 这样的话便要再计算一次等差数列,因为同时符合这两项的x,y也是等差数列 这样来看时间应该很可观,程序留给LZ本人写 愿你pascal进步 望采纳
武汉市19276704714: Pascal题:取数 - ?
赵乖欧普: 背包问题.对于每个数而言只有两种情况,取或不取.据此列状态数组 f=array of [1..50,0..1] 从头到尾扫一遍即可.初值:f[1,0]=0; f[1,1]=a[1]; a[1..n]存放每个数的值;状态转移方程 不取)f[i,0]=max{ f[i-1,0],f[i-1,1] }; 取) f[i,1]=f[i-1,0]+a[i]; 最后ans=max{ f[n,0],f[n,1] };
武汉市19276704714: 数的计数 pascal - ?
赵乖欧普: 1·不作任何处理:2·在它的左边加上一个自然数,但该自然数不能超过最左边数的的一半;3·加上数后,继续按此规则进行处理,直到不能再而 自然数为止. 6 符合条件11,在6左边加上一个自然数,但该自然数不能超过6的一半; 可以加的数为 1 ,2, 3 组成 数 16 26 362,在16左边加上一个自然数,但该自然数不能超过1的一半 没有可加数3,在26 左边加上一个自然数,但该自然数不能超过2的一半 可加的数为1 组成数 1264, 在36左边加上一个自然数,但该自然数不能超过3的一半 可加的数为1 组成数 136 统计下一共为 6个 6 16 26 126 36 136
武汉市19276704714: pascal表达式求值 - ?
赵乖欧普: while 语句是一种当型循环.先判断while 和do 间的条件是否满足,满足运行while 到 end;间的语句直到while 和do 间的条件不满足就停止.继续运行下面的程序.建议你使用pascal里面的分步运行查看.点pascal里面的debug,里面有个addwatch,是添加观察量.再点个watch 屏幕下出先一绿色的横条,上面有你addwatch中输入变量的值、按F7,没按一次运行一句.你看下面的变量的变化就应该可以找出怎么运行.
武汉市19276704714: pascal 史密斯数 - ?
赵乖欧普: var m,n,i:integer; begin for m:=2 to 32767 do begin n:=m; write(n,'='); i:=2; while n>i do if n mod i=0 then begin n:=n div i; write(i,'*'); end else inc(i); writeln(i); end; end.这个程序绝对正确. 严禁盗版!