题44:编程输入10个正整数,然后自动按从大到小的顺序输出
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题44:编程输入10个正整数,然后自动按从大到小的顺序输出。
题44:编程输入10个正整数,然后自动按从大到小的顺序输出。
Input
输入只有一行,包括10整数.
Output
输出只有一行,包括10个整数。
Sample Input
1 2 3 4 5 7 6 8 9 10
Sample Output
10 9 8 7 6 5 4 3 2 1
提示:数组与排序,注意输出最后一个空格要考虑。
处理方法最后一个单独输出。
program ex_44;
var a:array[1..10] of integer;
i,j,t:integer;
begin
for i:=1 to 10 do read(a[i]);
for i:=1 to 9 do
for j:=i+1 to 10 do
if a[i]<a[j] then begin t:=a[i];a[i]:=a[j];a[j]:=t; end;
for i:=1 to 9 do write(a[i],' ');
write(a[10]);
end.
题46:统计字母出现次数
输入一串小写字母(以"."为结束标志),统计出每个字母在该字符串中出现的次数(若某字母不出现,则不要输出)。
Input
输入只有一行,包括若干个字符。
Output
输出只有两行,第一行为出现的小写字母,第二行为字母的出现次数。
Sample Input
abdceeef.
Sample Output
abcdef
111131
提示:注意利用字符做下标,可以让程序简单。
program ex_45;
var a:array['a'..'z'] of integer;
i,ch:char;
begin
read(ch);
for i:='a' to 'z' do a[i]:=0;
while ch<>'.' do
begin
a[ch]:=a[ch]+1;
read(ch);
end;
for i:='a' to 'z' do
if a[i]<>0 then write(i);
writeln;
for i:='a' to 'z' do
if a[i]<>0 then write(a[i]);
end.
题48:求序列中所有递增或递减子序列的个数并输出子序列
题48:求序列中所有递增或递减子序列的个数并输出子序列。
输入一个由10个整数组成的序列,其中序列中任意连续三个整数都互不相同,求该序列中所有递增或递减子序列的个数。
Input
输入只有一行,包括10个整数。
之间用一个空格分开。
Output
输出的第一行,包括1个整数n.后面跟着n行.
Sample Input 1 10 8 5 9 3 2 6 7 4
Sample Output
6
1 10
10 8 5
5 9
9 3 2
2 6 7
7 4
program ex_48;
var a:array[1..11] of integer;
i,t,num:integer;
f:boolean;
begin
for i:=1 to 10 do read(a[i]);
num:=0;
for i:=2 to 9 do
if (a[i]-a[i-1])*(a[i]-a[i+1])>0 then inc(num);
writeln(num+1);
i:=1;
while i<10 do
begin
f:=false;
while (a[i]>a[i+1]) and (i<10) do
begin write(a[i],' ');i:=i+1;f:=true;end;
if f=true then writeln(a[i]);
f:=false;
while (a[i]<a[i+1]) and (i<10) do
begin write(a[i],' ');i:=i+1;f:=true; end;
if f=true then writeln(a[i]);
end;
end.
题49:判断是否构成回文
输入一串字符,字符个数不超过100,且以"."结束。
判断它们是否构成回文。
Input 输入只有一行,包括一串字符.
Output 输出只有一行.TRUE 或者FALSE
Sample Input 12321.
Sample Output TRUE
Hint
所谓回文指从左到右和从右到左读一串字符的值是一样的,如12321,ABCBA,AA等。
先读入要判断的一串字符(放入数组letter中),并记住这串字符的长度,然后首尾字符比较,并不断向中间靠拢,就可以判断出是否为回文。
因为是以“.”结束,因此还是把变量定义为字符,用数组比较合适program ex_49;
var a:array[1..100] of char;
ch:char;
i,t:integer;
f:boolean;
begin
read(ch);
t:=0;
while ch<>'.' do
begin
t:=t+1;
a[t]:=ch;
read(ch);
end;
f:=true;
for i:=1 to t div 2 do
if a[i]<>a[t-i+1] then begin f:=false;break; end;
if f=true then write('TRUE') else write('FALSE') ;
end.
参考程序二
program ex1049;
var a:array[1..100] of char;
i,t:integer;
begin
t:=1; read(a[1]);
while a[t]<>'.' do
begin
t:=t+1;
read(a[t]);
end;
t:=t-1;
for i:=1 to t div 2 do
if a[i]<> a[t-i+1] then begin write('FALSE');exit; end;
if t<>0 then write('TRUE') else write('FALSE');
end.
题1811:语文成绩
试题描述
给出N(5 <= N <= 150)个人的语文成绩,求N个人的语文总分和平均分,并按成绩高低排序后输出。
【输入描述】
第1行:一个整数N。
第2行:空格隔开的N个整数,表示N个人的语文成绩。
【输出描述】
三行。
第1行:一个整数,为N个人的总分。
第2行:N个人的语文平均分,保留两位小数。
第3行:N个空格隔开的整数,为从高到低输出的N个人的成绩。
【输入样例】
5
72 98 95 81 86
【输出样例】
432
86.40
98 95 86 81 72
program zf_pjf;
var n,s,i,j,t:integer;
a:array[1..150] of integer;
read(n);
s:=0;
for i:=1 to n do
begin
read(a[i]);
s:=s+a[i];
end;
writeln(s);
writeln(s/n:0:2);
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]<a[j] then begin t:=a[i];a[i]:=a[j];a[j]:=t; end;
for i:=1 to n-1 do
write(a[i],' ');
write(a[n]);
end.
题1646:总分和平均分
试题描述】
有N( 1 < N <= 150 )个人,M( 2 < M <= 50 )科成绩,计算N个人的总分、平均分及M科成绩的总分、平均分。
【输入描述】
第1行:2个整数N M。
第2..N+1行:每行M个整数,第i+1行为第i个人的M科成绩。
【输出描述】
第1..N+M+1行:每行两个数,为总分和平均分,平均分保留3位小数。
【输入样例】
3 2
90 91
73 82
【输出样例】
181 90.500
165 82.500
155 77.500
243 81.000
258 86.000
【解题提示】
输出说明:
前N行为N个人的总分、平均分;后M行为M科成绩的总分、平均分。
program zf_pjf;
var n,m,s,x,i,j:integer;
a:array[1..50] of integer;
begin
read(n,m);
fillchar(a,sizeof(a),0);
for i:=1 to n do
begin
s:=0;
for j:=1 to m do
begin
read(x);
s:=s+x;
a[j]:=a[j]+x
end;
writeln(s,' ',s/m:0:3);
end;
for i:=1 to m do
writeln(a[i],' ',a[i]/n:0:3) ;
题1800:喜羊羊运动会——采花生
【试题描述】
在参加“采花生”这个项目比赛时,考官会出示一块n行、m列的花生田,一共种了n*m株花生苗。
每株花生植株下都结了一定数量的花生果,选手一开始站在第1行,第1列的位置,要求用最短的时间找到结花生果最多的一株花生植株(数据保证花生果最多的植株只有一株),然后按先向南(下)走,再向东(右)的路线顺序去采摘它的花生果,沿路经过的其他花生植株下面的花生果也要一并摘下来,但不允许采摘没有路过的花生植株,否则依犯规出局处理。
问这个选手一共可以采摘多少粒花生果?
如一块n=5,m=6的花生田
第1列第2列第3列第4列第5列第6列
第1行 5 7 4 5 1 13
第2行9 6 3 2 8 7
第3行10 14 0 1 9 4
第4行 4 6 9 18 25 0
第5行 3 1 2 9 0 2
可以发现结花生果最多的那株花生植株在(4,5),则选手采摘的顺序应为(1,1)-(2,1)-(3,1)-(4,1)-(4,2)-(4,3)-(4,4)-(4,5),得一共采的花生果粒数为5+9+10+4+6+9+18+25=86。
【输入描述】
第1行:两个整数n m( 1 < n,m <= 100 ),表示花生田一共有n行m列。
第2..n+1行:每行m个空格隔开的整数,第i + 1行的第j个整数Pij(0 <= Pij <= 700)表示花生田里植株(i, j)下花生的数目,0表示该植株下没有花生。
【输出描述】
一行,一个整数,表示选手一共摘到的花生果数目。
【输入样例】
5 6
5 7 4 5 1 13
9 6 3 2 8 7
10 14 0 1 9 4
4 6 9 18 2
5 0
3 1 2 9 0 2
【输出样例】
86
program ex1800;
var a:array[0..100,0..100] of integer;
m,n,i,j,max,x,y:integer; s:longint;
begin
readln(n,m);
s:=0;
max:=0;
for i:=1 to n do
for j:=1 to m do
begin
read(a[i,j]);
if a[i,j]>max then begin max:=a[i,j];x:=i;y:=j; end;
end;
for i:=1 to x do s:=s+a[i,1];
for i:=2 to y do s:=s+a[x,i];
writeln(s);
end.
题51:约瑟夫问题
试题描述】
有M个人,其编号分别为1-M。
这M个人按顺序排成一个圈。
现在给定一个数N,从第一个人开始依次报数,数到N的人出列,然后又从下一个人开始又从1开始依次报数,数到N的人又出列...如此循环,直到最后一个人出列为止。
【输入描述】
输入只有一行,包括2个整数M(8 <= M <= 15 ),N( 5 <= N <= 32767 )。
之间用一个空格分开。
【输出描述】
输出M行,每行一个整数。
【输入样例】
8 5
【输出样例】
5
2
8
7
1
4
6
3
【解题提示】
分析:这样一道题用指针的方法解很直观。
但用数组的方法也可以做出来。
我们设数组A有M个变量,每个变量中放的数是1。
现在计数器K从1开始向后数,每数一个变量则累加器S把变量中的数相加。
当数到最后一个变量M时,自动转向第一个变量接着数。
当累加器的数到N时,最后一个被加的变量出列(打印其下标值,同时将该变量的值由1变为0),同时累加器的值清零。
然后从出列的下一个变量又开始向后累加每个变量的值,直到加到N时,最后一个被加的变量出列......用这种方法不担心出列的变量被重复相加,因为一旦被判出列,该变量的值由1变为0,
即使相加也无妨。
program ex51;
var a:array[0..15] of 0..1;
m,n,s,t,i:integer;
begin
read(m,n);
s:=0;t:=m;
fillchar(a,sizeof(a),1);
i:=1;
while t>0 do
begin
s:=s+a[i];
if s=n then begin
writeln(i);
a[i]:=0;
dec(t);
s:=0;
end;
inc(i);
if i >m then i:=1;
end;
end.
题52:相加之和最大,并给出它们的起始位置
相加之和最大,并给出它们的起始位置
【试题描述】
有一组数,其排列形式如下:
11,19,9,12,5,20,1,18,4,16,6,10,15,2,17,3,14,7,13,8,
且尾部8和头部11首尾相连,构成环形的一组数,编程找出相邻的4个数,其相加之和最大,并给出它们的起始位置。
【输入描述】
第一行有一个整数n( 5 <= n <= 20 )
第二行有n个数
【输出描述】
第一行有一个数,即最大的和
第二行有一个数,即起始数的位置
【输入样例】
20
11 19 9 12 5 20 1 18 4 16 6 10 15 2 17 3 14 7 13 8
【输出样例】
51
1
【解题提示】
如果最大的和有多个,则输出最左边的一个的起始位置
program ex52;
var a:array[1..20] of longint;
n,i,j,t,b:integer; s,max:longint;
begin
readln(n);
for i:=1 to n do read(a[i]);
b:=1; max:=-maxlongint;
for i:=1 to n do
begin
s:=0;
for j:=0 to 3 do
begin
t:=i+j;
if t>n then t:=t mod n;
s:=a[t]+s;
end;
if s>max then begin b:=i;max:=s; end;
end;
writeln(max);
write(b);
end.
题53:统计大写英文字母的个数【试题描述】
算算以‘.’结束的一串字符中含有多少个大写的英文字母。
【输入描述】
输入一串字符,以.结束
【输出描述】
输出一行,即这串字符中大写字母的个数。
【输入样例】
PRC,PRC,I’m from China.
【输出样例】
8
【解题提示】
请使用while..do语句和repeat..until语句两种方法实现。
program ex53;
var ch:char;
n:integer;
begin
read(ch);
n:=0;
while ch<>'.' do
begin
if (ch>='A') and (ch<='Z') then inc(n);
read(ch);
end;
write(n);
end.
题57:允许并列的排名
题57:允许并列的排名
在我们参加的各种竞赛中,允许并列的排名方式是经常遇到的。
例如有四名选手的成绩分别为50、80、50、30分,则80分的选手为第一名,50分的两名选手均为第二名,30分的选手为第四名。
请编写一个程序,计算一个选手在这种排名方式之下的名次(分数高的选手排前面)。
Input
第一行为一个整数 N,表示参赛的选手数,1<=N<=100;
第二行为N个整数,表示每位选手的成绩;
第三行为一个整数m,表示要查询名次的选手的成绩。
Output 只有一个整数,表示该选手的名次。
Sample Input
4
50 80 50 30
50
Sample Output
2
2008年北京市小学生邀请赛模拟题(2)
program ex57;
var num,mc:array[1..100] of integer;
cj:array[1..100] of real;
m,n,i,j,x,t:integer; r:real;
begin
readln(n);
for i:=1 to n do
begin
num[i]:=i;read(cj[i]);
end;
read(m);
for i:=1 to n-1 do
for j:=i+1 to n do
if cj[i]<cj[j] then
begin
t:=num[i];num[i]:=num[j];num[j]:=t; r:=cj[i]; cj[i]:=cj[j];cj[j]:=r;
end;
x:=0; mc[1]:=1;
for i:=2 to n do
begin
if cj[i]=cj[i-1] then mc[i]:=mc[i-1] else mc[i]:=i;
end;
for i:=1 to n do
if cj[i]=m then break;
write(mc[i]);
end.
题58:合唱队形
题58:合唱队形
茵茵所在的合唱队共有N个人( N 为奇数)。
为了准备一次演出,老师开始为她们安排合唱队形了。
大家都知道,合唱队形通常是中间高两端低的。
老师是这样安排他们的队形的:先让所有的同学按高个儿在前的顺序排成一队。
然后,最高的那位同学单独站出来,这是合唱队形的中心,再让第二位同学站在她的左手边,让第三位同学站在她的右手边,再依次向两端安排其他人……事先给定所有人的身高,请输出她们站成合唱队形之后的身高顺序。
Input
第一行是一个整数,表示合唱队的总人数,已知 N 为奇数,且 1 ≤ N ≤ 51 。
第二行是 N 个整数,表示以厘米为单位的所有人的身高。
Output
只有 N 个整数,表示她们按老师的要求站成合唱队形之后的身高顺序。
Sample Input
7
154 160 157 162 159 152 163
Sample Output
152 157 160 163 162 159 154
Source
2008年北京市小学生邀请赛模拟题(3)
program ex58;
var n,i,j,t,k:integer;
a,b:array[1..51] of longint;
begin
readln(n);
for i:=1 to n do
read(a[i]);
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]<a[j] then begin t:=a[i];a[i]:=a[j];a[j]:=t; end;
k:=n div 2 +1;
b[k]:=a[1];
for i:=1 to n div 2 do
begin b[k-i]:= a[i*2+1] ;b[k+i]:= a[i*2]; end;
for i:=1 to n do write(b[i],' ');
end.
题1117:【入门】数组逆序
Description
给你m个整数,将其逆序输出
Input
第一行一个整数m(3 <= m <= 100 ):数的个数
第二行m个整数(空格隔开)(这些数在0-9999999之间)
Output
m个整数(空格隔开)
Sample Input
3
1 7 5
Sample Output
5 7 1
Hint
最后一个数后面没有空格
Source
program ex1117;
var a:array[1..100] of longint;
i,m:integer;
begin
readln(m);
for i:=1 to m do read(a[i]);
for i:=m downto 2 do write(a[i],' ') ;
write(a[1]);{最后一个单独输出,这样可以避免后面出现空格}
end.
题1118:【入门】数组元素的查找
Description
给你m个整数,查找其中有无值为n的数,有则输出该数第一次出现的位置,没有则输出-1。
Input
第一行一个整数m:数的个数 ( 0 <= m <= 100 )
第二行m个整数(空格隔开)( 这些数在 0-999999范围内)
第三行为要查找的数n
Output
n的位置或-1
Sample Input
4
1 2 3 3
3
Sample Output
3
Source
program ex1118;
var a:array[1..100] of longint;
i,m:integer;
n:longint;
begin
readln(m);
for i:=1 to m do read(a[i]);
read(n);
for i:=1 to m do
if a[i]=n then begin write(i);exit; end;
write(-1);
end.
题1119:【入门】元素插入有序数组
Description
给你一个整数n和一个数列,这个数列保证从小到大排列,现要求将这个整数n插入到数列中,使新的数列仍然从小到大排列。
Input
第一行一个整数n :等待插入的数
第二行一个整数m :数列中数的个数
第三行m个整数(空格隔开)
Output
一行整数:新的数列(空格隔开)
Sample Input
2
4
1 3 4 5
Sample Output
1 2 3 4 5
Source
program ex1119;
var a:array[1..100] of longint;
i,t,m:integer;
n:longint;
begin
readln(n);
readln(m);
for i:=1 to m do read(a[i]);
i:=1;
while (a[i]<n) and (i<=m) do inc(i) ;{找到要插入的合适的地方}
t:=i;
for i:=m downto t do a[i+1]:=a[i];
a[t]:=n;
for i:=1 to m do write(a[i],' ');
write(a[m+1]);
end.
题1120:【入门】数组元素的移动
Description
数组元素的移动,把数组的第x个位置的元素先保存起来,然后把x+1到n的元素,依次往前移一位,最后原来的第x个位置的元素放在最后
Input 有3行
第一行有一个整数n
第二行有n个整数
第三行有一个整数x
Output 移动后的数组
Sample Input
8
1 2 3 4 5 6 7 8
1
Sample Output
2 3 4 5 6 7 8 1
program ex1120;
var a:array[1..100] of longint;
i,t,x,n:integer;
begin
readln(n);
for i:=1 to n do read(a[i]);
read(x);
t:=a[x];
for i:=x to n-1 do a[i]:=a[i+1];
a[n]:=t;
for i:=1 to n-1 do write(a[i],' ');
write(a[n]);
end.
题1121:【入门】数组元素的插入
Description 在一个数组的第x个位置插入一个新的数y
Input
有四行
第一行有一个整数n ( 5 <= n <= 10 )
第二行有n个整数
第三行有一个整数x,为要插入的位置
第四行有一个整数y,为要插入的整数
Output
更新后的数组
Sample Input
5
7 2 3 4 5
2
9
Sample Output
7 9 2 3 4 5
program ex1121;
var a:array[1..11] of longint;{要插入一个,数组要多开一个空间} i,t,x,n:integer;
y:longint;
begin
readln(n);
for i:=1 to n do read(a[i]);
readln(x);
readln(y);
for i:=n downto x do a[i+1]:=a[i];
a[x]:=y;
for i:=1 to n do write(a[i],' ');
write(a[n+1]);
end.
题1122:【入门】数组元素的删除
Description
把一个数组的第x个位置的元素删除掉
Input
有三行
第一行有一个整数n
第二行有n个整数
第三行有一个整数x,为要删除的位置
Output 输出更新后的数组
Sample Input
5
1 2 3 4 5
3
Sample Output
1 2 4 5
program ex1122;
var a:array[1..100] of longint;
i,t,x,n:integer;
begin
readln(n);
for i:=1 to n do read(a[i]);
readln(x);
for i:=x to n-1 do a[i]:=a[i+1];
for i:=1 to n-2 do write(a[i],' ');
write(a[n-1]);
end.
题1123:【入门】数组元素的排序
Description 对数组的元素按从小到大进行排序
Input
有两行
第一行有一个整数n( 5 <= n <= 10 )
第二行有n个整数
Output
输出更新后的数组
Sample Input
8
1 2 3 6 8 7 4 5
Sample Output 1 2 3 4 5 6 7 8
Hint 用插入、选择、冒泡三种方法进行排序。
参考程序一(选择排序)
program ex1123;
var a:array[1..10] of longint;
i,j,n:integer;
t:longint;
begin
readln(n);
for i:=1 to n do read(a[i]);
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]>a[j] then begin t:=a[i];a[i]:=a[j];a[j]:=t; end; for i:=1 to n-1 do write(a[i],' ');
write(a[n]);
end.
插入
var a:array[0..10] of longint;
n,i,j:integer;
t:longint;
begin
readln(n);
for i:=1 to n do read(a[i]);
for i:=2 to n do
begin
t:=a[i];
j:=i-1;
while (t<a[j]) and (j>=1) do
begin
a[j+1]:=a[j];
dec(j);
end;
a[j+1]:=t;
end;
for i:=1 to n-1 do write(a[i],' ');
write(a[n]);
end.
题1115:【基础】下载电影
Description
放暑假了,小明想上网下载一些电影看,但是缓慢的网速令他无法忍受。
他了解到了接下来的N个小时中的网速情况,想找一段连续的M个小时来下载电影,并且希望这M个小时的平均网速尽可能的大,你能编一个程序帮助他实现愿望吗?
Input
输入
第一行包含两个整数N、M,1<=M<=N<=1000000;
第二行包含N个整数,表示第N个小时的网速。
相邻两数之间用空格隔开。
Output
输出文件仅有一行包含一个实数,表示最大的平均网速,保留小数点后两位。
Sample Input
6 3
3 6 1 5 6 4
Sample Output
5.00
Hint 输入数据保证重复次数最大的情况只有一个。
本参考程序没有通过测试,考虑到没有更好的做法,先放于此,抛砖引玉。
program ex1115;
var n,m:longint;
a:array[1..1000000] of longint;
p:real;
s,max :int64;
i:integer;
begin
readln(n,m);
for i:=1 to n do read(a[i]);
s:=0;
for i:=1 to m do s:=s+a[i];
max:=s;
for i:=2 to n-m+1 do
begin
s:=s+a[i+m-1]-a[i-1];
if s>max then max:=s;
end;
p:=max/m;
write(p:0:2);
end.
网上程序,比较巧妙,但超时
var m,n,max,num,i:longint;
sum:array[0..1000000] of longint;
begin
read(n,m);
for i:=1 to n do
begin
read(num);
sum[i]:=sum[i-1]+num;
end;
for i:=m to n do if sum[i]-sum[i-m]>max then max:=sum[i]-sum[i-m];
writeln(max/m:0:2);
end.
tt他爸提供的程序,能通过
program t1115;
var n,n1,n2,n3,m,i:longint;
a:array [1..1000000] of longint;
begin
readln(n,m);
n1:=0;
for i:=1 to m do
begin
read(a[i]);
n1:=n1+a[i];
end;
n2:=n1;
for i:=m+1 to n do
begin
read(a[i]);
n2:=n2+a[i]-a[i-m];
if n2>n1 then n1:=n2;
end;
writeln(n1/m:0:2);
end.
sjz题44:输出低于平均分的同学的成绩输出低于平均分的同学的成绩
Description
读入10位同学的语文成绩,算出平均分,输出低于平均分的人的成绩.
Input
一行有空格隔开的数(整数)
Output
一行低于平均分的成绩,空格隔开。
Sample Input
56 78 24 98 90 12 45 36 98 45
Sample Output
56 24 12 45 36 45
program exsjz44;
var a:array[1..10] of integer;
p:real;
begin
s:=0;
for i:=1 to 10 do
begin
read(a[i]);
s:=s+a[i];
end;
p:=s/10;
for i:=1 to 10 do
if a[i]<p then write(a[i],' ');
end.
题1125:【入门】找找谁的身高超过全家的平均身高
题1125:【入门】找找谁的身高超过全家的平均身高
Description
找找谁的身高超过全家的平均身高(整数)。
全家n口人,输入输出数据如下:(平均身高保留一位小数)
Input
第一行有一个整数n( 1 < n < 11 )。
第二行是n个整数,用空格隔开。
Output
第一行为全家的平均身高(保留一位小数);
第二行有若干个数,为超过平均身高的人的身高厘米数。
Sample Input
7
175□160□172□158□178□162□142
Sample Output
AV=163.9
□1:175□3:172□5:178
Hint
□表示空格
program ex1125;
var a:array[1..11] of integer;
i,n:integer;
begin
readln(n);s:=0;
for i:=1 to n do
begin
read(a[i]);
s:=s+a[i];
end;
p:=s/n;
writeln('AV=',p:0:1);
for i:=1 to n do
if a[i]>p then write(' ',i,':',a[i]);
end.
题1135:【入门】查找“支撑数”
题1135:【入门】查找“支撑数”
【试题描述】在已知一组整数中,有这样一种数非常怪,它们不在第一个,也不在最后一个,而且刚好都比左边和右边相邻的数大,你能找到它们吗?每行输出5项。
【输入描述】
第一行为整数m,表示输入的整数个数。
( 3<= m <=100 )
第二行为m个整数。
【输出描述】
若干个支撑数
【输入样例】
14
1 3
2 4 1 5
3 9 7 10 8 23 85 43
【输出样例】
3 4 5 9 10
85
program ex1135;
var a:array[1..100] of longint;
i,m,t:integer;
begin
read(m);
for i:=1 to m do read(a[i]);
t:=0;
for i:=2 to m-1 do
if (a[i]>a[i-1]) and (a[i]>a[i+1]) then
begin
write(a[i],' ');
inc(t);
if t mod 5=0 then writeln;
end;
end.
【入门】排除异形基因
【试题描述】
神舟号飞船在完成宇宙探险任务回到地球后,宇航员张三感觉身体不太舒服,去了医院检查,医生诊断结果:张三体内基因已被改变,原有人体基因序列中已经被渗入外星球不明异形生物基因,但可喜的是,这些异形基因都有一个共同的特征,就是该基因序号的平方除以7的余数都是1,要赶快清除掉,否则会危害整个人类。
赶快行动吧。
【输入描述】
第一行是一个整数n(基因个数)
第二行是n个整数(张三的基因序列)
【输出描述】去除异形基因后的正常序列,空格隔开
【输入样例】
4
6 2 8 12
【输出样例】
2 12
program ex1136;
var n,i:integer;
a:array[1..1000] of longint;
begin
readln(n);
for i:=1 to n do
read(a[i]);
for i:=1 to n do
if a[i]*a[i] mod 7<>1 then write(a[i],' ');
end.
题1137:【入门】看电影
【试题描述】
全校组织看电影,每个班级坐一列,五3班班主任老师发现前面有几个同学估计是觉得电影没意思,老是在讲话,坐在最后的几个同学又离的太远,被前排同学遮住了,因此班主任决定,全班悄悄来一次大调换,将所有学生倒过来排,原来坐第一个的,现在坐最后一张位置,原来坐第二个的,现在坐最后第二张位置,以此类推。
请你来帮帮五3班的同学实现这样的调换。
【输入描述】
第一行是整数n(学生人数)。
第二行是n个整数(n个同学的学号,是9位整数)。
【输出描述】输出调换后的n个学生的学号。
【输入样例】
4
348312356 834123458 312345845 134568901
【输出样例】
134568901 312345845 834123458 348312356
program ex1137;
var n,i:integer;
a:array[1..100] of longint;
begin
readln(n);
for i:=1 to n do read(a[i]);
for i:=n downto 1 do write(a[i],' ');
end.
题1138:【入门】小明排队做操迟到
【试题描述】做操的时间到了,小明在教室还在思考刚刚老师讲的一道题目,当他想通这个题时,同学们都已经在操场上排好队了,他赶快跑到操场上找到自己的班级队伍,希望尽快找到以前排队的位置,准备做操,小明记得应该排在第x学号同学的后面。
你能不能来帮帮小明呢?
【输入描述】
输入(两行):
n x y(现在队伍的长度、第x同学的学号、小明的学号)
n个同学的学号(5位整数)
【输出描述】 n+1个学号(小明加入队伍后队伍中的每个数据)
【输入样例】
4 34123 23483
34812 34123 23133 45831
【输出样例】
34812 34123 23483 23133 45831
program ex1138;
var i,t:integer;
a:array[1..100] of longint;
n,x,y:longint;
begin
readln(n,x,y);
for i:=1 to n do read(a[i]);
for i:=1 to n do
if a[i]=x then begin t:=i+1; break;end;
for i:=n downto t do a[i+1]:=a[i];
a[t]:=y;
for i:=1 to n do write(a[i],' ');
write(a[n+1]);
end.
题1145:【入门】数字出现次数
题1145:【入门】数字出现次数
【试题描述】有50个数(0-19),求这50个数中相同数字出现的最多次数为几次?
【输入描述】 50个数字
【输出描述】 1个数字(即相同数字出现的最多次数)
【输入样例】
1 10
2 0 15 8 12 7 0
3 15 0 15 18 16 7 17 16 9 1 19 16 12 17 12
4 3 11 1 14 2 11 14 6 11 4 6 4 11 13 18 7 0 3 2 3 18 19 2 16
【输出样例】
4
program ex1145;
var i,j,k,max:integer;
a:array[0..19] of integer;
begin
fillchar(a,sizeof(a),0);
for i:=1 to 50 do
begin
read(k);
inc(a[k]);
end;
max:=0;
for i:=0 to 19 do
if a[i]>max then max:=a[i];
write(max);
end.
题1165:【入门】最小数
Description
输入n个整数的数列,请找出数列中最小数所在的位置(若有多个最小数,则选最左边的那个最小数),把它与数列的第一个数对调,其他数的位置不动,输出此数列。
Input
数组数的个数n (N<=200)
一行n个数,用空格分开(都<=32767)
Output
第一行:最小数所在的位置(只需要输出最左边的一个的位置)
第二行:交换后的数组(一个空格隔开)
Sample Input
3
2 6 1
Sample Output
3
1 6 2
program ex1164;
var i,j,n,t,k,min:integer;
a:array[1..200] of integer;
begin
readln(n);
for i:=1 to n do read(a[i]);
min:=a[1]; k:=1;
for i:=2 to n do
if a[i]<min then begin min:=a[i];k:=i;end;
t:=a[1];a[1]:=a[k];a[k]:=t;
writeln(k);
for i:=1 to n do write(a[i],' ');
end.
题1202【入门】三角形类别
Description
输入三个整数,以这三个数为边长,判断是否构成三角形;若不能输出"no",若构成三角形,进一步判断它们构的是:锐角三角形或直角三角形或钝角三角形.分别输出"ruijiao","zhijiao","dunjiao"
Input
三个整数
Output
一个字符串
Sample Input
3 4 5
Sample Output
zhijiao
Hint
两个短边的平方和等于一个长边的平方时为直角三角形
两个短边的平方和小于一个长边的平方时为钝角三角形
两个短边的平方和大于一个长边的平方时为锐角三角形
program ex1202;
var a:array[1..3] of longint;
i,j,t:integer;
begin
readln(a[1],a[2],a[3]);
if (a[1]+a[2]>a[3]) and (a[2]+a[3]>a[1]) and (a[1]+a[3]>a[2])
then
begin
for i:=1 to 2 do
for j:=i+1 to 3 do
if a[i]>a[j] then begin t:=a[i];a[i]:=a[j];a[j]:=t;end;
if a[1]*a[1]+a[2]*a[2]=a[3]*a[3] then write('zhijiao') else
if a[1]*a[1]+a[2]*a[2]<a[3]*a[3] then write('dunjiao') else
write('ruijiao');
end
else
begin
write('no');exit;
end;
end.
题1140:Problem C:【基础】亲密数对
Description
键盘输入N,N在2至2000之间,求2至N中的亲密数对,就是A的因子和等于B,B的因子和等于A,且A≠B。
如48和75是亲密数对。
48的因子和为2+3+4+6+8+12+16+24=75,而75的因子和为
3+5+15+25=48。
Input 只有一行,为一个整数N( 2<=N<=2000 )
Output 输出若干行,每行两个整数(用一个空格隔开)。
Sample Input 200
Sample Output
48 75
75 48
140 195
195 140
program ex1140;
var n,i,j,s:integer;
a:array[0..2000] of integer;
begin
readln(n);
for i:=2 to n do
begin
s:=0;
for j:=2 to i-1 do
if i mod j=0 then s:=s+j ;
a[i]:=s;
end;
for i:=2 to n do
if (a[a[i]]=i) then writeln(i,' ',a[i]);
end.
题1650:【入门】火柴棒等式(简版:)
题1650:【入门】火柴棒等式(简版:)
Description 0-9这几个数字可以用火柴棒拼成。
如下:
给你一个等式,算算总共要多少根火柴棒。
注意:输入中只有数字和“+”、“=”。
加号和等于号各需要2根火柴棒。
Input 一行:一个等式(等式的字符个数不超过255)。
Output 一行:一个整数,表示一共需要火柴棒的根数。
Sample Input 1+2+3=6
Sample Output 24
Source 2009武进信息学奥赛初中组
program ex1650;
const a:array['0'..'9'] of integer=(6,2,5,5,4,5,6,3,7,6);
var st:string;
i,len:integer;
s:longint;
begin
readln(st);
len:=length(st);
s:=0;
for i:=1 to len do
begin
if (st[i]<>'=') and (st[i]<>'+') then
s:=s+a[st[i]] else s:=s+2;
end;
writeln(s);
end.
题1839:【基础】洗牌问题
题1839:【基础】洗牌问题
【试题描述】
给你2N张牌,编号为1,2,3,...,n,n+1,...,2n。
这也是最初的牌的顺序。
一次洗牌是把序列变为n+1,1,n+2,2,n+3,3,n+4,4,...,2n,n。
可以证明,对于任意自然数N,都可以在经过M次洗牌后第一次重新得到初始的顺序。
编程对于小于100000的自然数N,求出M的值。
【输入描述】一行,一个自然数N(1 <= N <= 100000)
【输出描述】一行,一个整数M。
【输入样例】 3
【输出样例】
【解题提示】 50%的数据,n <= 10000; 100%的数据,n <= 100000。
【试题来源】《聪明人的游戏》初中版
网络
program ex1839;
var
n,x,m:longint;
begin
read(n);
n:=n*2+1;
x:=1;
m:=0;
repeat
x:=x*2 mod n;
inc(m);
until x=1;
writeln(m);
end.
超时
program ex1839;
var a,b:array[1..200000] of longint;
i,j,n,m:longint;
function pd:boolean;
var i:integer;
begin
pd:=true;
for i:=1 to n*2 do
if a[i]<>i then begin pd:=false; break;end;
end;
procedure work;
var i,j:integer;
begin
for i:=1 to n do
b[2*i-1]:=a[n+i];
for i:=1 to n do
b[2*i]:=a[i];
for i:=1 to n*2 do a[i]:=b[i];
end;
begin
readln(n);
for i:=1 to n*2 do a[i]:=i;
m:=0;
repeat
inc(m);
work;
until pd=true;
writeln(m);
end.
题1731:【基础】重排数
题1731:【基础】重排数
【试题描述】
读入二行整数,然后程序要完成如下的操作:
第一步将2行数合并在一起,
第二步将合并好的数由大到小排序,
第三步重新排列,从第一个数起开始编号,然后将奇数号上的数(样例中的13,9,5)从前向后排,偶数号上的数(样例中的12,7,4)从后往前排。
第四步计算,将排好的数,第一个+第二个数的2倍+第三个数的3倍+…
第五步:输出计算的结果。
【输入描述】
第一行是一个整数 n(1≤n≤10),
第二行有n个整数,整数范围在1~100之间,数与数之间空格隔开。
第三行是一个整数 m(1≤m≤10),
第四行有m个整数,整数范围在1~100之间,数与数之间空格隔开。
【输出描述】
一个整数(最后计算的结果)。
【输入样例】
4
12 4 5 9
2
【输出样例】 169
【解题提示】
样例说明:
第一步合并后为:12 4 5 9 13 7
第二步上例中的数成为:13 12 9 7 5 4
第三步得到:13 9 5 4 7 12
第四步计算后为:13+2×9+3×5+4×4+5×7+6×12=169
最后输出 169
【试题来源】 2008年江苏省小学生信息学(计算机)奥赛program ex1731;
var m,n,i,j,s,t,b1,b2:integer;
a,b,c:array[1..20] of integer;
sum:longint;
begin
readln(n);
for i:=1 to n do read(a[i]);
readln(m);
for i:=1 to m do read(a[i+n]);
s:=m+n;
for i:=1 to s-1 do
for j:=i+1 to s do
if a[i]<a[j] then begin
t:=a[i];
a[i]:=a[j];
a[j]:=t;
end;
b1:=0;b2:=0;
for i:=1 to s do
if i mod 2=1 then begin inc(b1); b[b1]:=a[i];end else begin inc(b2); c[b2]:=a[i];end; for i:=1 to b1 do a[i]:=b[i];
for i:=1 to b2 do a[b1+i]:=c[b2-i+1];
sum:=0;
for i:=1 to s do
sum:=sum+i*a[i];
writeln(sum);。