社区
C语言
帖子详情
帮忙解决这题
rossi789
2004-11-20 10:11:54
已知条件:用1,2,3,4,5,6,7,8,9 这九个数字填充以下等式,并且在每等式全部用上这九个数字,每个数字不能重复。
□□×□□□=□□□□
共有7个答案,举个例子:
12×483=5796
编程找出其他的答案.
...全文
143
9
打赏
收藏
帮忙解决这题
已知条件:用1,2,3,4,5,6,7,8,9 这九个数字填充以下等式,并且在每等式全部用上这九个数字,每个数字不能重复。 □□×□□□=□□□□ 共有7个答案,举个例子: 12×483=5796 编程找出其他的答案.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
rossi789
2004-11-21
打赏
举报
回复
Leaveye:
能说说你的算法吗
marszheng
2004-11-21
打赏
举报
回复
楼上这位好强啊???可以交个朋友吗
我的qq:287147309
Leaveye
2004-11-21
打赏
举报
回复
输出:
42 * 138 = 5796
28 * 157 = 4396
48 * 159 = 7632
39 * 186 = 7254
27 * 198 = 5346
18 * 297 = 5346
12 * 483 = 5796
91 * 768 = 4352
75 * 892 = 1364
Leaveye
2004-11-21
打赏
举报
回复
/*
已知条件:用1,2,3,4,5,6,7,8,9 这九个数字填充以下等式,并且在每等
式全部用上这九个数字,每个数字不能重复。
□□×□□□=□□□□
共有7个答案,举个例子:
12×483=5796
编程找出其他的答案.
*/
#define Masked(m) (UsedMask & (m))
#define AddMask(m) (UsedMask |= (m))
#define DelMask(m) (UsedMask &= ~(m))
#define IsUsed(n) Masked(MaskOf[n])
#define Use(n) AddMask(MaskOf[n])
#define UnUse(n) DelMask(MaskOf[n])
#define Inc(n) while(IsUsed(n) && (n) < 10) ++(n)
void main(void)
{
unsigned int UsedMask = 0x0001;
unsigned int CellMask[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
const int MaskOf[10] = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 };
unsigned int Multiplicand, Multiplicator, Product, tmp;
printf("\n");
for(
Multiplicator = 100, CellMask[5] = 2, CellMask[4] = CellMask[3] = 1;
Multiplicator < 1000;
++Multiplicator,
CellMask[5] = MaskOf[Multiplicator / 100],
CellMask[4] = MaskOf[Multiplicator / 10 % 10],
CellMask[3] = MaskOf[Multiplicator % 10]
) {
if( CellMask[5] & CellMask[4] || CellMask[5] & CellMask[3]
|| CellMask[4] & CellMask[3]
|| Masked(CellMask[5] | CellMask[4] | CellMask[3])
) continue;
AddMask(CellMask[5] | CellMask[4] | CellMask[3]);
for(
Multiplicand = 10, CellMask[2] = 2, CellMask[1] = 1;
Multiplicand < 100;
++Multiplicand, CellMask[2] = MaskOf[Multiplicand / 10],
CellMask[1] = MaskOf[Multiplicand % 10]
) {
Product = Multiplicand * Multiplicator;
if( CellMask[2] & CellMask[1] || Product > 9999
|| Masked(CellMask[2] | CellMask[1])
) continue;
AddMask(CellMask[2] | CellMask[1]);
CellMask[6] = MaskOf[Product % 10];
CellMask[7] = MaskOf[(Product /= 10) % 10];
CellMask[8] = MaskOf[(Product /= 10) % 10];
CellMask[9] = MaskOf[Product / 10];
tmp = 0;
Product = CellMask[6] | CellMask[7] | CellMask[8] | CellMask[9];
while(Product > 0)
(Product & 1)? ++tmp: 0, Product >>= 1;
Product = Multiplicand * Multiplicator;
tmp = (4 == tmp) && ! Masked(
CellMask[6] | CellMask[7] | CellMask[8] | CellMask[9]
);
if(tmp) {
printf("%d * %d = %d\n", Multiplicand, Multiplicator, Product);
}
DelMask(CellMask[2] | CellMask[1]);
}
DelMask(CellMask[5] | CellMask[4] | CellMask[3]);
}
}
a252169322
2004-11-21
打赏
举报
回复
用穷举!
Squall1009
2004-11-21
打赏
举报
回复
可以先从每个数的最后的一位填
hillman004
2004-11-21
打赏
举报
回复
这是一个全排列的问题,之后判断一下就行了
看一下算法分析书,肯定会有的
Leaveye
2004-11-21
打赏
举报
回复
/*
已知条件:用1,2,3,4,5,6,7,8,9 这九个数字填充以下等式,并且在每等
式全部用上这九个数字,每个数字不能重复。
□□×□□□=□□□□
共有7个答案,举个例子:
12×483=5796
编程找出其他的答案.
*/
unsigned int UsedMask = 0x0001; // 这个对象移到外边比较好理解
// 这是一个整体标记对象,按位标记
// 在用为1,未用为0
// 该对象记录当前所使用的数字,初值为已使用0
// 对该整体标记的操作接口(面对标记)
#define Masked(m) (UsedMask & (m)) // 判断标记 m 是否已经设定在整体标记里
#define AddMask(m) (UsedMask |= (m)) // 将标记 m 追加进整体标记
#define DelMask(m) (UsedMask &= ~(m)) // 从整体标记中移除标记 m
// 对该整体标记的操作接口(面对数字)
#define IsUsed(n) Masked(MaskOf[n]) // 在整体标记中判断数字 n 是否已经使用
#define Use(n) AddMask(MaskOf[n]) // 在整体标记中标记数字 n 已经使用
#define UnUse(n) DelMask(MaskOf[n]) // 从整体标记中标记数字 n 尚未使用
#define Inc(n) while(IsUsed(n) && (n) < 10) ++(n) // 没用,忘删了
void main(void)
{
unsigned int CellMask[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
// 九个位置,分别编号 C2 C1 * C5 C4 C3 = C9 C8 C7 C6
const int MaskOf[10] = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 };
// 各数字对应的标记,为提高效率,写为一维表
unsigned int Multiplicand, Multiplicator, Product, tmp;
// 被乘数、乘数、积 以及 临时变量
printf("\n");
// 用整型搜索数字(被乘数、乘数),乘数的循环次数多,放在外层
// 找乘数
for(
Multiplicator = 100, CellMask[5] = 2, CellMask[4] = CellMask[3] = 1;
Multiplicator < 1000;
++Multiplicator,
CellMask[5] = MaskOf[Multiplicator / 100],
CellMask[4] = MaskOf[Multiplicator / 10 % 10],
CellMask[3] = MaskOf[Multiplicator % 10]
) { // 被乘数循环
// 对于每一个被测试的乘数,分析其使用的数字,记录标记
if( CellMask[5] & CellMask[4] || CellMask[5] & CellMask[3]
|| CellMask[4] & CellMask[3]
|| Masked(CellMask[5] | CellMask[4] | CellMask[3])
) continue; // 不可用,找下一个
// 找到一个可用乘数
AddMask(CellMask[5] | CellMask[4] | CellMask[3]); // 设置数字为已用
// 找被乘数
for(
Multiplicand = 10, CellMask[2] = 2, CellMask[1] = 1;
Multiplicand < 100;
++Multiplicand, CellMask[2] = MaskOf[Multiplicand / 10],
CellMask[1] = MaskOf[Multiplicand % 10]
) { // 被乘数循环
// 对于每一个被测试的被乘数,分析其使用的数字,记录标记
Product = Multiplicand * Multiplicator;
if( CellMask[2] & CellMask[1] || Product > 9999
|| Masked(CellMask[2] | CellMask[1])
) continue; // 不可用,找下一个
// 找到一个可用被乘数
AddMask(CellMask[2] | CellMask[1]); // 设置数字为已用
CellMask[6] = MaskOf[Product % 10];
CellMask[7] = MaskOf[(Product /= 10) % 10];
CellMask[8] = MaskOf[(Product /= 10) % 10];
CellMask[9] = MaskOf[Product / 10];
tmp = 0;
Product = CellMask[6] | CellMask[7] | CellMask[8] | CellMask[9];
while(Product > 0)
(Product & 1)? ++tmp: 0, Product >>= 1;
Product = Multiplicand * Multiplicator;
tmp = (4 == tmp) && ! Masked(
CellMask[6] | CellMask[7] | CellMask[8] | CellMask[9]
); // 判断积是否可用的表达式
if(tmp) {
printf("%d * %d = %d\n", Multiplicand, Multiplicator, Product);
}
// 分析该被乘数完成
DelMask(CellMask[2] | CellMask[1]); // 设置数字为未用
}
// 分析该乘数完成
DelMask(CellMask[5] | CellMask[4] | CellMask[3]); // 设置数字为未用
}
}
Flood1984
2004-11-20
打赏
举报
回复
穷举!
java题不会做怎么办,Java等考试题不会做,大家
帮忙
看看,该怎么
解决
当前位置:我的异常网» J2SE»Java等考试题不会做,大家
帮忙
看看,该怎么
解决
Java等考试题不会做,大家
帮忙
看看,该怎么
解决
www.myexceptions.net网友分享于:2013-01-19浏览:8次Java等考试题不会做,大家
帮忙
看看...
Java面试题大全(2021版)
发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本套Java面试题大全,全的不能再全,哈哈~ 一、Java基础知识面试题 1、Java概述 ①. 何为编程 ...
java判断五张牌中有一对,五张同花顺概率,52张扑克牌,任取5张牌,求出现一对、两对、同花顺的概率。 请
帮忙
解决
一下这道概率题,求详细的列出式......
请
帮忙
解决
一下这道概率题,求详细的列出式...给你三个式子:1*3/51*48/50*44/49*40/48这个是出现一对的概率2对1*3/51*48/50*3/49*40/48同花顺:1/13*1/12*1/11*1/10*1/9*10/13不知道楼主能不能看懂。Q2:同花顺每...
HDU4506:小明系列故事——师兄帮
帮忙
Problem Description 小明自从告别了ACM/ICPC之后,就开始潜心研究数学问题了,一则可以为接下来的考研做准备,再者可以借此机会帮助一些同学,尤其是漂亮的师妹... 所以,他现在私下求你
帮忙
解决
这道题目,题目是
经典面试智力题200+题和解答
考来考去大多是各种旧题,本来是考智力的事情,现在几乎已经变成了题海战术的考试,所以我们也不能在这一块落后。学习各种奇巧淫技,扩展一下思路,同时免得笔试面试吃亏。 搜集了大量智力题,有些还挺有意思,顺便...
C语言
69,373
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章