主题:请各路高手帮忙解答,万分感谢!
whb85
[专家分:0] 发布于 2006-02-22 09:25:00
1. 已知有以下由自然数1,2,3…N(N〈1000)按顺序组成的螺旋图形,在数2处拐第一个弯,在数3处拐第二个弯,在数5处拐第三个弯….。
请编程从键盘输入数字X(X〈50),则输出第X个拐弯点处的数字。(24分)
21 22 23
20 7 8 9 10
19 6 1 2 11
18 5 4 3 12
17 16 15 14 13
(N=23时)
2、若发行一套四种不同面值(为自然数)的邮票,限定使用时不超过3枚,为了能连续贴出1,2,...,N的面值, 编程求如何确定四种面值,使 N 最大?(输出应发行哪四种面值及此时N的最大值)(16分)
3、今有一n×n的表格(n<10)),每个格子的表示方法如下图:
(1,1) (1,2) (1,3) (1,4) ••• (1,n)
(2,1) (2,2) (2,3) (2,4) ••• (2,n)
(3,1) (3,2) (3,3) (3,4) ••• (3,n)
(4,1) (4,2) (4,3) (4,4) ••• (4,n)
••• ••• ••• ••• ••• •••
(n,1) (n,2) (n,3) (n,4) ••• (n,n)
请编程,若键盘输入某一格子的位置,则输出所有与该格子不在同行、同列及对角线的所有格子。非编程方法不给分。(20分)
4、A$为由键盘输入的字符串,它由字符a,b,c,...,x,y,z中的若干个不重复的字符组成。若a<b<c...<x<y<z,请编程将字符串A$按升序排序后输出。(20分)
如:输入bgf,则输出:bfg。
5、从键盘输入四个自然数,请用这四个自然数组成一个不含括号的加减法混合运算题,使该题所得结果最小(但不能为负值,而且运算的中间结果也不能为负值)。 输出格式要符合数学算式的要求,如有多种解答,需输出所有符合要求的表达式。(20分)
例如: 输入: 15, 6,12,4
输出: 15-12+4-6=1
15+4-12-6=1
15+4-6-12=1
15-6+4-12=1
4+15-12-6=1
4+15-6-12=1
回复列表 (共10个回复)
沙发
摩尔曼斯克 [专家分:10] 发布于 2006-03-14 16:45:00
dim a(4),b(3)
for i= 1 to 4
input a(i)
next i
for i= 1 to 4
for j= 1 to 3-i
swap a(i),a(j)
for b(1)= 1 to 2
for b(2)= 1 to 2
for b(3)= 1 to 2
sum=a(1)
for n=1 to 3
if b(n)=1 then sum =sum+a(n+1) else sum=sum-a(n+1)
next n
if sum>=0 then
print a(1);
for k=1 to 3
if b(k)=1 then print "+";a(k+1); else print "-";a(k+1)
next k
print "=";sum
end if
next b(3)
next b(2)
next b(1)
swap a(i),a(j)
next j
next i
end
板凳
摩尔曼斯克 [专家分:10] 发布于 2006-03-14 16:46:00
没试调过。。
因为我没装QB。。
VB里又SWAP不能用。。
所以有什么小问题楼主自己去解决吧
3 楼
moz [专家分:37620] 发布于 2006-03-14 18:25:00
第一题:
input x
print (x\2+1)*(x\2)+1+(x\2+1)*(x mod 2)
4 楼
moz [专家分:37620] 发布于 2006-03-15 12:24:00
第二题,利用组合来计算,只是有点特别的是:我用了字符串。
declare function nextzh$ (a$, b$)
for i = 1 to 10
a$ = chr$(i) + a$
next
b$ = right$(a$, 4)
do
c$ = ""
for i = 1 to 4
c$ = c$ + string$(3, mid$(b$, i, 1))
next
d$ = right$(c$, 3)
for i = 1 to 255
s = 0
for j = 1 to 3
s = s + asc(mid$(d$, j, 1))
if s = i then exit for
next
if j > 3 then
i = i - 1
d$ = nextzh$(c$, d$)
if d$ = right$(c$, 3) then
if i > m then
m = i
for i = 1 to len(b$)
print asc(mid$(b$, i, 1));
next
print ,m
end if
exit for
end if
end if
next
b$ = nextzh$(a$, b$)
loop until b$ = right$(a$, 4)
function nextzh$ (a$, b$)
for i = 1 to len(b$)
if instr(1, a$, mid$(b$, i, 1)) > i then
mid$(b$, 1, i) = mid$(a$, instr(1, a$, mid$(b$, i, 1)) - i, i)
exit for
end if
next
if i > len(b$) then b$ = right$(a$, len(b$))
nextzh$ = b$
end function
5 楼
摩尔曼斯克 [专家分:10] 发布于 2006-03-15 12:28:00
最后一第我改用C++试了一下。。
发你们看看。。
#include<iostream.h>
void main()
{
int a[4],b[4];
int i,j,sum(0),temp;
for (i=0;i<4;i++)
cin >>a[i];
for (i=0;i<4;i++)
for (j=i;j<4;j++)
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
for (b[1]=1;b[1]<=2;b[1]++)
for (b[2]=1;b[2]<=2;b[2]++)
for (b[3]=1;b[3]<=2;b[3]++)
{
sum=a[0];
for (int k=1;k<=3;k++)
if (b[k]==1)
sum=sum+a[k];
else
sum=sum-a[k];
if (sum>=0)
{
cout <<a[0];
for (k=1;k<=3;k++)
if (b[k]==1)
cout <<'+'<<a[k];
else
cout <<'-'<<a[k];
cout <<'='<<sum<<endl;
}
}
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
6 楼
摩尔曼斯克 [专家分:10] 发布于 2006-03-15 12:30:00
可以用的。
只是如果有重复数字的话。。
要加一句判断。。
那句用的函数我不知道是什么。。(c++里)
所以。。。。
7 楼
摩尔曼斯克 [专家分:10] 发布于 2006-03-15 12:33:00
[quote]第一题:
input x
print (x\2+1)*(x\2)+1+(x\2+1)*(x mod 2)[/quote]
能输出真个图形吗
8 楼
moz [专家分:37620] 发布于 2006-03-15 13:07:00
第三题。10*10的方格
do
cls
for i=1 to 10
for j=1 to 10
color 1,7
if x*y<>0 and(i=x or j=y or(i-x)=(j-y))or(i-x)=(y-j))then color 1,0
print "[]";
next
print
next
color 7,0
input "x,y"; x, y
loop until x*y=0
9 楼
moz [专家分:37620] 发布于 2006-03-15 13:11:00
第四题。
INPUT a$
FOR i = 1 TO LEN(a$) - 1
FOR j = i + 1 TO LEN(a$)
IF MID$(a$, i, 1) > MID$(a$, j, 1) THEN
b$ = MID$(a$, i, 1)
MID$(a$, i, 1) = MID$(a$, j, 1)
MID$(a$, j, 1) = b$
END IF
NEXT j, i
PRINT a$
10 楼
moz [专家分:37620] 发布于 2006-03-15 18:11:00
第五题不想做了,心情不好,这些东西在旧贴里多的是。
我来回复