您的当前位置:首页正文

江苏省小学生信息学竞赛初赛练习完善程序

2020-02-07 来源:步旅网
完善程序

江苏省小学生信息学竞赛初赛练习卷(一) (2010) 1. 求1,2,3,„„,R的全排列(R<=8)。例如当R=3时,全排列为123,132,213,231,312,321。 [程序清单:] Input R:Dim A(R) For N=1 To R Next N GoSub 100 S=1 For N=2 To R S=S*N Next N For N= J=R Do While J=J-1 Loop K=R Do While K=K-1 Loop T=A(J-1):A(J-1)=A(K):A(K)=T For P=J To R-1 For Q=P+1 To R IF Then T=A(P):A(P)=A(Q):A(Q)=T EndIf Next Q Next P GoSub 100 Next N Sleep:End 100 For I=1 To R Print Using \"#\";A(I); Next I Print 2. 用高精度计算阶乘的和:S=1!+2!+3!+„+N!。 (N<=50) 输入:由键盘输入正整数N 输出:输出计算结果S,要求每三位有一个“,”号 输入样例:n=22 输出样例:S=1,177,652,997,443,428,940,313 [程序清单:] H=200 Input \"INPUT N=\";N Dim A(H+1),B(H) For I=1 To N C=0 For J=1 To H X= C=X\\10 X=X Mod 10 B(J)=X Y= A(J)=Y Mod 10 A(J+1)= Next J Next I Do While A(H)=0 H=H-1 Loop N= If N>0 Then For I=H To Step -1 Print Using \"#\";A(I); Next I Print \EndIf J=0 For I= To 1 Step -1 J=J+1 Print Using \"#\";A(I); If J Mod 3 = 0 And I<>1 Then Print \Next I Print Sleep:End 3. 取数问题 给出两个任意的正整数N和K(1=1 And N<=10000 And K>=0 And K=R Then N= S=S+1 R=R*2 Else For I=1 To T If Then F=-1 Next I T=T+1:A(T)= N= :R=1 EndIf Loop Until N=0 Or F If N=0 Then Print \"STEP\";S Else Print \"ERROR\"; Sleep:End 江苏省小学生信息学竞赛初赛练习卷(二) (2010)

4. 设计一个算法,求出有序序列中前面最小的100个不同的数,它们满足: 给出两个任意的正整数N和K(13 Then Exit For Next I If S=3 Then For I=1 To 2*N Print Using \"#\"; ; Next I Print EndIf EndIf Loop Sleep : End 方法二:全排列 程序: Input N Dim A(N*2) For I=1 To N A(I)=1 A(N+I)=2 Next I Do While J=N*2 Do While J=J-1 Loop Do While K=K-1 Loop Swap A(J-1),A(K) For P=J To N*2-1 For Q=P+1 To N*2 If Then Swap A(P),A(Q) Next Q Next P S=0 For L=1 To N*2-1 If A(L)<>A(L+1) Then S=S+1 If S>3 Then Exit For Next L If Then For L=1 To N*2 Print Using \"#\";A(L); Next L Print EndIf Loop Sleep : End 6. 输入M个1、N个0,可以组合成多少个不同的以1开头的数字?请输出所有的组合形式 程序: Input \"1:\Input \"2:\For I=1 To M A(1)=1 Next I For J=1 To N A( )=0 Next J Do While For I=1 To M+N Print Using \"#\";A(I); Next I Print J=M+N Do While J=J-1 Loop K=M+N Do While K=K-1 Loop Swap A(J,1),A(K) For P=J To M+N-1 For Q=P+1 To M+N IF Then Swap A(P),A(Q) Next Q Next P Loop Sleep : End

江苏省小学生信息学竞赛初赛练习卷(五) (2010) 1. 找出N个字符串中最长的公共子串。若最长公共子串不止一个,则输出所有最长公共子串。例如,当N=5时,读入的五个字符串分别为“GHJSDERTOP”、”DFERTGHJ”、”VBERTGHJJK”、”DDGGHJUUERT”,则输出”GHJ”和“ERT”。 程序: Read N For K=1 To N Read Next K For K=1 To N-1 For J=1 To N-K If Then Swap A$(J),A$(J+1) Next J Next K L=Len(A$(1)) M= P=0 Do Q=0 Do Q= C$=Mid$(A$(1),Q,M) For J= If InStr(A($(J), )=0 Then F=1 Next J If F=0 Then Print C$: Loop Until (Q+M>L) Or (F=0) M=M-1 Loop Until If P<>1 Then Print \"NO\" Sleep : End Data 5,\"GHJSDERTOP\ 2. 输入Q、P,求Q除以P的结果,最多输出20位小数(不考虑四舍五入) 如:输入:Q=16,P=2, 输出8 输入:Q=35,P=8 输出4.375 输入:Q=9,P=7, 输出1.{285714} 输入:Q=355,P=113, 输出3.14159292035398230088 程序: Dim B(100),C(100) Input Q,P K= Q=Q Mod P Print K; If Then Print \".\"; J=1 B(1)=Q J1=0 Do J1=J1+1 C(J1)= Q=Q*10-C(J1)*P If Q<>0 Then J2=1 Do While J2=J2+1 Loop If B(J2)=Q Then F=1 For D=1 To Print C(D); Next D Print \"{\"; For D= Print C(D); Next D Print \ Else J=J+1 B(J)= EndIf Else For D= Print C(D); Next D EndIf Loop Until If And Q<>0 And F=0 Then For D=1 To J1 Print C(D); Next D EndIf EndIf Sleep : End 3. 暑假中,某班同学用自己积攒下来的零花钱购买了书包、文具盒、书等N件不同的物品,准备捐献给地震灾区的小朋友,这些物品的重量分别是W1、W2、„„、Wn,它们的价值分别是C1、C2、„„、Cn。现在要将这些物品装载到一个最多能容纳M公斤重的纸箱里,应如何选择各样物品,才能使纸箱中装载的物品的总价值最大。 程序:Read N,M Dim For K=1 To N Read W(K),C(K) Next K For K=0 To N B(K)=0:D(K)=0 Next K CMAX=0 Do While J=N Do While J=J-1 Loop B(J)=1 For K= B(K)=0 Next K For K=1 To N WK=WK+B(K)*W(K) Next K CK=0 For K=1 To N Next K If And CK>CMAX Then CMAX= For K=1 To N D(K)=B(K) Next K Loop Print \"CMAX=\";CMAX For K=1 To N If Then Print K;W(K);C(K) Next K Data 4,10 Data 2,1,3,3,4,5,7,9

江苏省小学生信息学竞赛初赛练习卷(一) (2009) 1. 键盘输入N,在1,2,3,4,5,6,7,8,9九个数字之间添上“+”,“-”后使得等式成立。例如输入N=39,则输出所有等式1+2-3+4+5+6+7+8+9=39,再例如输入N=1,则输出所有等式1+2+3+4-5+6+7-8-9=1. 程序: Input N For I=1 To 9 A(I)= B(I)=0 Next I C$(0)=\"+\": Do While For I=2 To 9 If B(I)=0 Then S=S+A(I) Else Next I If Then Print A(I); For J=2 To 9 Print ;A(J); Next J Print \"=\";N EndIf K=9 Do While Loop B(K)= Loop Sleep : End 2. 二维数组的排序 把9个数存放在二维数组A中,并把这个数组的元素按列的上升顺序排列。例如: 排序前的数组为: 5 2 8 排序后的数组为 1 2 3 7 1 9 3 6 4 4 5 6 7 8 9 程序: N=9 Dim A(3,3),B(9) For I=1 To 3 For J=1 To 3 Read A(I,J) Print A(I,J); Next J Print Next Print K=1 For I=1 To 3 For J=1 To 3 B(K)=A(I,J) K= Next J Next I For I=1 To 8 For J=I+1 To 9 If Then Swap B(I),B(J) Next J Next I For K=1 To 9 I=K-Abs(K>3)*3-Abs(K>6)*3 J= A(I,J)=B(K) Next K For I=1 To 3 For J=1 To 3 Print ; Next J Print Next I Sleep : End Data 5,7,3,2,1,6,8,9,4 3. 暑假中,某班同学用自己积攒下来的零花钱购买了书包、文具盒、书等N件不同的物品,准备捐献给地震灾区的小朋友,这些物品的重量分别是W1、W2、„„、Wn,它们的价值分别是C1、C2、„„、Cn。现在要将这些物品装载到一个最多能容纳M公斤重的纸箱里,应如何选择各样物品,才能使纸箱中装载的物品的总价值最大。 程序:Read N,M Dim For K=1 To N Read W(K),C(K) Next K For K=0 To N B(K)=0:D(K)=0 Next K CMAX=0 Do While J=N Do While J=J-1 Loop B(J)=1 For K= B(K)=0 Next K For K=1 To N WK=WK+B(K)*W(K) Next K CK=0 For K=1 To N Next K If And CK>CMAX Then CMAX= For K=1 To N D(K)=B(K) Next K Loop Print \"CMAX=\";CMAX For K=1 To N If Then Print K;W(K);C(K) Next K Data 4,10 Data 2,1,3,3,4,5,7,9 江苏省小学生信息学竞赛初赛练习卷(二) (2009)

1. 统计数字出现的次数:从键盘输入5个三位正整数,统计出现数字0,1,2,3,4,5„„,8,9的次数分别是几次?例如,输入为: ?580 ?159 ?453 ?268 ?747 则输出为:0 1 2 3 4 5 6 7 8 9 1 1 1 1 2 3 1 2 2 1 程序: Dim A(10) For I=1 To 5 Do Input X Loop Until X=Int(X) And X>=100 And X<=999 Do While X1=X Mod 10 A(X1)= X=X\\10 Loop Next I For I=1 To 9 Print Using \"###\"; ; Next I Print For I=0 To 9 Print Using \"###\"; ; Next I Print I Sleep : End 2. 求元素之和最大的子方阵 在m*n(m,n<=20)的正整数数字方阵中,找出一个p*q子阵(1<=p<=m,1<=q<=n),使其元素之和最大。例如,下面是5*4的数字阵中,元素之和最大的一个2*3子阵 5*4数字阵: 3 11 5 10 2 元素之和最大的2*3子阵为: 8 1 21 3 7 4 7 6 8 12 22 9 2 9 3 5 10 21 3 6 8 程序: Dim A(20,20) For I=1 To 20 For J=1 To 20 A(I,J)=0 Next J Next I Input M,N For I=1 To M For J=1 To N Input A(I,J) Next J Next I Input P,Q MAX=0 For I=1 To M-P+1 For J=1 To N-Q+1 For I1=I To P+I-1 For J1=J To Q+J-1 Next J1 Next I1 If S > MAX Then P1=I Q1=I EndIf Next J Next I For I=P1 To For J=Q1 To Print Using \"###\";A(I,J); Next J Next I Sleep : End 江苏省小学生信息学竞赛初赛练习卷(五) (2009)

1. 编写螺旋矩阵: 分析:关键还是填写了K值之后如何修改i和j,使它们指向下一个要填写的位置。仔细观察螺旋矩阵,容易发现,整个矩阵可以分成上、右、下、左4个三角形,在每个三角形里前进的方向是一致的,分别是向右、向下、向左、向上,如下图所示。因此我们自然会想到,在填写了K值之后,应该判断当前(i , j)处在哪个三角形中,然后相应地修改i或者j。请注意,4个三角形并不一般大,上三角形最大,这是因为每一圈的最后一个元素(如24,40等)填写过后应该向右走,而不是继续向上。 程序: Input \"N:\Dim A(N,N) I= :J= For K=1 To N*N A(I,J)=K If I<=J+1 And I+J=\"0\" And A$<=\"9\" Or A$=\".\" Then B$= Else Print \"DATA ERROR!!\":End EndIf Next I For H=1 To J If F$(H)=\"^\" Then N(H)=N(H)^N(H+1):GoSub 10 Next H For H=1 To J If F$(H)=\"*\" Then N(H)=N(H)*N(H+1):GoSub 10 If F$(H)=\"/\" Then N(H)=N(H)/N(H+1):GoSub 10 Next H For H=1 To J If F$(H)=\"+\" Then N(H)=N(H)+N(H+1):GoSub 10 If F$(H)=\"-\" Then N(H)=N(H)-N(H+1):GoSub 10 Next H Print S$;\"=\"; 10 For I=H To L-2 F$(I)=F$(I+1): Next I H= J= Return Sleep : End 3. 取数组合。从1,2,3,„„,N这N(N为偶数)个自然数中任取R个偶数按降序进行组合(4<=N<=20,1<=R

因篇幅问题不能全部显示,请点此查看更多更全内容