160 likes | 275 Views
题 1055 :求出 100 至 999 范围内的所有水仙花数. 水仙花数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。(例如: 1^3 + 5^3 + 3^3 = 153 ). 三位的水仙花数共有 4 个: 153 , 370 , 371 , 407. 输出结果行末有空格,算格式错误,一定要当心. program ex1055; var i,g,s,b,num:integer; begin num:=0; for i:=100 to 999 do begin g:=i mod 10;
E N D
题1055:求出100至999范围内的所有水仙花数 水仙花数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153) 三位的水仙花数共有4个:153,370,371,407 输出结果行末有空格,算格式错误,一定要当心
program ex1055; var i,g,s,b,num:integer; begin num:=0; for i:=100 to 999 do begin g:=i mod 10; s:=i div 10 mod 10; b:=i div 100; if (i=g*g*g+s*s*s+b*b*b) then begin inc(num); if num=1 then write(i) else write(' ',i) end; end; end.
在线测试,提交的结果中英文对译: Accepted(通过) Compile Error(编译错) Run Error(运行错) Time Limit Exceeded(超时) Memory Limit Exceeded(超内存) Wrong answer (答案错) Format Error(格式错)。
随机生成20个1-100之间的数,输出平均值,保留两位小数随机生成20个1-100之间的数,输出平均值,保留两位小数 var d:real; x,p,s:integer; begin randomize; for x:= 1 to 20 do begin p:=random(100)+1; write(p,' '); s:=s+p; end; writeln; d:=s/20; writeln(d:0:2); readln; end. program ex3; var i:integer; s:real; begin randomize; s:=0; for i:=1 to 20 do s:=s+(random(99)+1); writeln(s/20:0:2); end. 随机生成20个1-100之间的数,输出平均值,同时输出高于平均值的数 要求有变量保存生成的数 如果要保留20个数要有多少变量?
a1 a2 a3 … an 数组 名字相同下标不同的一组数 a[1] a[2] a[3] … a[n]
Pascal数据类型 • 简单类型 • 标准类型: 整型、实型、字符型、布尔型 • 自定义类型:枚举型、子界型 • 构造类型数组类型、集合类型、记录类型和文件类型 • 指针类型 type char integer real string boolean
program pzf; var i,n:integer; s,p:real; a:array[1..10] of real; begin readln(n); s:=0; for i:=1 to n do begin read(a[i]); s:=s+a[i]; end; p:=s/n; for i:=1 to n do if a[i]>p then write (a[i] ,’ ‘); end. 输入n个学生的某门课程的成绩,输出大于平均分的数 n<=10 a[1] a[2] a[3] ……
数组类型 数组定义 方式一,先构造,再定义 type data=array[1..50] of integer; var x:data; x为数组变量 方式二,构造与定义同时 var x:array [1..50] of integer; student:array[‘a’..’z’] of real; 数组是一个整体,数组名是一个整体的标识,要想使用数组中的元素,只能通过下标才能实现。数组下标可以是一个表达式。下标类型必须是有序的,可以是整型、字符型、布尔型、枚举型、子界型等
数组的基本操作 • 数组的输入、输出 • 数组元素的查找 • 数组元素的移动 • 数组元素的插入 • 数组元素的删除 • 排序
数组元素的输入、输出 例:按照顺序读入十个数,然后以逆序方式输出。 for i:=1 to 10 do read(a[i]); {输入} for i:=10 downto 1 do write(a[i]); {输出} Program ex2_1; const n=10; {符号常量} var a:array[1..n] of integer; {下标不能是未知} i:integer; begin for i:=1 to n do read(a[i]); {读入} for i:=n downto 1 do write(a[i],’‘); end.
思考:将上题A数组中的各元素的值按逆序重新放置再输出,如何操作?思考:将上题A数组中的各元素的值按逆序重新放置再输出,如何操作? 可以先开一个B数组,将A数组各元素的值按逆序赋值B数组元素,再将B数组各元素的值按顺序回到A数组相应元素中。
Program ex2_1; const n=10; var a,b:array[1..n] of integer; i,m:integer; begin for i:=1 to n do read(a[i]); for i:=1 to n do b[i]:=a[ ]; for i:=1 to n do a[i]:=b[i]; for i:=1 to n do write(a[i],’‘); end. n-i+1 也可以共用一个变量t实现不开其它数组对调,如何做?
Program ex2_1; const n=10; var a:array[1..n] of integer; i,t:integer; begin for i:=1 to n do read(a[i]); for i:=1 to n div 2 do begin t:=a[i]; a[i]:=a[n-i+1]; a[n-i+1]:=t; end; for i:=1 to n-1 do write(a[i],' '); write(a[n]); end.
数组元素的移动 A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] A[10] 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 第一步: 取出A[1]中的数放t中 1 第二步: 后面所有元素向前移动 第三步: 1 将t中的值放到A[10]处