设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1343|回复: 9
打印 上一主题 下一主题

[其它] 如何用代码解决如下问题??

[复制链接]
跳转到指定楼层
1#
发表于 2006-7-14 01:47:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
判断一个数A,如果该数加1或减1能够被5整除,则将其随机分为两个数B和C,B+C=A,且B和C也应该符合加1或减1不能够被5整除的条件。例如:49,可以将其分为:1或48、2或47、22或27等等
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2006-7-14 04:45:00 | 只看该作者
Function NumMod(intNum As Integer) As Boolean

Dim RadNumA As Integer
Dim RadNumB As Integer
Dim TF As Integer

TF = 0

If ((intNum + 1) Mod 5 = 0) Or ((intNum - 1) Mod 5 = 0) Then
   
        Do Until TF = 1
   
               RadNumA = Int((intNum * Rnd) + 1)
   
               RadNumB = intNum - RadNumA
     
              If (((RadNumA + 1) Mod 5 <> 0) Or ((RadNumA - 1) Mod 5 <> 0)) And (((RadNumB + 1) Mod 5 <> 0) Or ((RadNumB - 1) Mod 5 <> 0)) Then
  
                   TF = 1
   
                   NumMod = True
     
                   Debug.Print RadNumA
                   Debug.Print RadNumB
   
                End If
   
         Loop
     
  Else
   
   NumMod = False
  
End If
   
  
End Function
3#
 楼主| 发表于 2006-7-14 18:43:00 | 只看该作者
好像不行,得出的数字不符合条件,用4测试,得出4、0,用49测试会得出15、34等数字

[此贴子已经被作者于2006-7-14 10:47:30编辑过]

4#
发表于 2006-7-14 19:13:00 | 只看该作者
是B和C也应该符合加1或减1不能够被5整除???

那49分解出来15 34 同时减一 是不被5整除呀,是一个加一 一个减一,还是同加同减?

4 0 是没有排除负数减一的问题,修改一下应可以排除
5#
 楼主| 发表于 2006-7-14 19:59:00 | 只看该作者
可能我没有说清楚,分成的两个数字,必须单个判断加1减1不能够被5整除,不能同加同减,但看版主的代码又好像没错
6#
发表于 2006-7-14 20:04:00 | 只看该作者
增加一个条件: 减一 后要大于等于零的,就可以排除4 0的情况
7#
 楼主| 发表于 2006-7-14 21:55:00 | 只看该作者
关键还在于生成的两个数的分别判断,因为4按代码应该只能拆成2、2,不能拆成0、4或1、3,因为4加1或减1还是会被5整除,不符合条件(1-1 mod 5=0,1也不行)。只要两个数判断成功,就不会出现0。

[此贴子已经被作者于2006-7-14 13:59:09编辑过]

8#
发表于 2006-7-14 22:13:00 | 只看该作者
以下是引用fyupeng在2006-7-14 13:55:00的发言:


关键还在于生成的两个数的分别判断,因为4按代码应该只能拆成2、2,不能拆成0、4或1、3,因为4加1或减1还是会被5整除,不符合条件(1-1 mod 5=0,1也不行)。只要两个数判断成功,就不会出现0。



        那是加一减一都不能被5整除, 你再测试一下

Function NumMod(intNum As Integer) As Boolean

Dim RadNumA As Integer
Dim RadNumB As Integer
Dim TF As Integer

TF = 0

If ((intNum + 1) Mod 5 = 0) Or ((intNum - 1) Mod 5 = 0) Then
   
        Do Until TF = 1
   
               RadNumA = Int((intNum * Rnd) + 1)
   
               RadNumB = intNum - RadNumA
     
              If ((RadNumA + 1) Mod 5 <> 0 And (RadNumB + 1) Mod 5 <> 0) And ((RadNumA - 1) Mod 5 <> 0 And (RadNumB - 1) Mod 5 <> 0) Then
  
                   TF = 1
   
                   NumMod = True
     
                   Debug.Print RadNumA
                   Debug.Print RadNumB
   
                End If
   
         Loop
     
  Else
   
   NumMod = False
  
End If
   
  
End Function




[此贴子已经被作者于2006-7-14 14:18:03编辑过]

9#
发表于 2006-7-14 22:55:00 | 只看该作者
这样可以吗?

Function cfsz(intm As Integer)
If (intm + 1) Mod 5 = 0 Or (intm - 1) Mod 5 = 0 Then
For i = 1 To intm
If (i + 1) Mod 5 <> 0 And (i - 1) Mod 5 <> 0 Then
j = intm - i
If (j + 1) Mod 5 <> 0 And (j - 1) Mod 5 <> 0 Then
Debug.Print i; j; intm
End If
End If
Next
End If
End Function
10#
 楼主| 发表于 2006-7-15 00:07:00 | 只看该作者
可以了,多谢两位
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-15 09:32 , Processed in 0.114180 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表