趣味程序,你能搞定吗?

wendream 2005-09-02 05:54:18
把1、2、3、4、5、6填入如下表格内:

----------------------
| | | |
| | | |
----------------------
| | | |
| | | |
----------------------

要求:1、每一列右边的数字比左边的大

2、每一行下面的数字比上面的大

3、用程序实现并打印出图案。给出源代码。

注:该题选自《趣味程序设计集锦》.

tips: 左上角和右下角的数字分别应该是1和6
...全文
161 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wendream 2005-09-11
  • 打赏
  • 举报
回复
结帖!
wendream 2005-09-11
  • 打赏
  • 举报
回复
to: geniusqihy(追风者)
浏览了一下你的代码,好像和我写的思路也差不多.那你看看我用vb写的这个程序有什么问题呢?
'/************************************************************************************************/
'把123456填入如下表格内:

'----------------------
'| | | |
'| | | |
'----------------------
'| | | |
'| | | |
'----------------------

'要求:1、每一列右边的数字比左边的大
' 2、每一行下面的数字比上面的大
'/************************************************************************************************/



Option Base 1 ' 设定数组下限从数字1开始

Option Explicit

Dim a(2, 3), i, j As Integer
Dim b(4) As Integer
Dim a1, a2, a3, a4 As Integer
Dim col, row As Boolean



Private Sub Command1_Click()
Dim b(4), i As Integer
Randomize
i = 1
j = 1
For i = 1 To 2 '将数组清零
For j = 1 To 3
a(i, j) = 0
Next j
Next i
b(1) = 2
For i = 2 To 4
b(i) = i + 1
Next i

a(1, 1) = 1
a(2, 3) = 6

For a1 = 1 To 4
For a2 = 1 To 4
For a3 = 1 To 4
For a4 = 1 To 4
a(1, 2) = b(a1)
a(1, 3) = b(a2)
a(2, 1) = b(a3)
a(2, 2) = b(a4)

If (a(1, 2) > a(1, 1)) And (a(1, 3) > a(1, 2)) And (a(2, 2) > a(2, 1)) And (a(2, 3) > a(2, 2)) Then col = True

If (a(2, 1) > a(1, 1)) And (a(2, 2) > a(1, 2)) And (a(2, 3) > a(1, 3)) Then row = True


If col = True And row = True Then '满足条件则在标签上显示
Label1.Caption = a(1, 1)
Label2.Caption = a(1, 2)
Label3.Caption = a(1, 3)
Label4.Caption = a(2, 1)
Label5.Caption = a(2, 2)
Label6.Caption = a(2, 3)
For i = 1 To 10
For j = 1 To 10000

Next j
Next i


End If

Next a4
Next a3
Next a2
Next a1


End Sub

Private Sub Command2_Click()
End
End Sub

Private Sub Form_Load()
i = 1
j = 1
For i = 1 To 2
For j = 1 To 3
a(i, j) = 0
Next j
Next i
col = False
row = False

End Sub
geniusqihy 2005-09-06
  • 打赏
  • 举报
回复
#include <stdio.h>
int completed(int a[3],int b[3]);
main()
{
int up[3],down[3];
up[0]=1;
down[2]=6;
for(int i=2;i<6;i++)
{
up[1]=i;
for(int j=2;j<6;j++)
{
if(i!=j)
{
up[2]=j;
for(int k=2;k<6;k++)
{
if((k!=i)&&(k!=j))
{
down[0]=k;
for(int l=2;l<6;l++)
if((l!=i)&&(l!=j)&&(l!=k))
{
down[1]=l;
if(completed(up,down))
{
printf("---------------\n");
printf("| %d %d %d |\n| %d %d %d |\n",
up[0],up[1],up[2],down[0],down[1],down[2]);
printf("---------------\n");
}
}
}
}
}
}
}

}
int completed(int a[3],int b[3])
{
if((a[0]<a[1])&&(a[1]<a[2])&&(b[0]<b[1])&&(b[1]<b[2])&&(a[0]<b[0])&&
(a[1]<b[1])&&(a[2]<b[2]))
return 1;
else
return 0;
}
snowbirdfly 2005-09-06
  • 打赏
  • 举报
回复
http://blog.csdn.net/cudy123/archive/2004/11/19/186767.aspx
这里面有关于它的介绍~~~
snowbirdfly 2005-09-06
  • 打赏
  • 举报
回复
回溯法也称为试探法,该方法首先暂时放弃关于问题规模大小的限制,并将问题的候选解按某种顺序逐一枚举和检验。当发现当前候选解不可能是解时,就选择下一个候选解;倘若当前候选解除了还不满足问题规模要求外,满足所有其他要求时,继续扩大当前候选解的规模,并继续试探。如果当前候选解满足包括问题规模在内的所有要求时,该候选解就是问题的一个解。在回溯法中,放弃当前候选解,寻找下一个候选解的过程称为回溯。
你自己看一下数据结构的书本就知道了~~
wendream 2005-09-06
  • 打赏
  • 举报
回复
最近实习.没有及时看贴.大家原谅哈.
我想问下 foochow(恰似你的温柔) 的是"什么是回溯啊"?能用vb举个例子吗?
foochow 2005-09-02
  • 打赏
  • 举报
回复
这个用回溯不就可以了:-)
zhouhuahai 2005-09-02
  • 打赏
  • 举报
回复
哦,思考不严谨,还有其它可能....汗!
zhouhuahai 2005-09-02
  • 打赏
  • 举报
回复
不就是:
1 2 3
4 5 6么?

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧