社区
数据结构与算法
帖子详情
求解,用0-9组成乘法竖式
xiachm
2008-06-25 03:03:01
有如下一个算式,在下面的乘法竖式里面填上0-9共十个数,每个数字不能重复,使算式成立,用C语言实现。
口口
X 口口口
==========
口口口口口
...全文
539
11
打赏
收藏
求解,用0-9组成乘法竖式
有如下一个算式,在下面的乘法竖式里面填上0-9共十个数,每个数字不能重复,使算式成立,用C语言实现。 口口 X 口口口 ========== 口口口口口
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sprague
2008-06-28
打赏
举报
回复
for(j=10234/i; j <988; j++)
这是要做什么,能给讲讲吗???
[Quote=引用 9 楼 xibeitianlang 的回复:]
#include <stdio.h>
main()
{
int i,j,k,a,b,c;
long m,n;
for(i=20; i <99; i++)
{
a=i/10; b=i%10;
if(a==b) continue;
for(j=10234/i; j <988; j++)
{
c=1 < <a ¦1 < <b;
c ¦=1 < <(j/100) ¦1 < <(j/10%10) ¦1 < <(j%10);
m=(long)i*j; n=m;
for(k=0; k <5; k++)
{
c ¦=1 < <(n%10); n/=10;
}
if(c==1023)
printf("%6d\n X%4d\n=======\n%6u\n\n",i,j,m);
}
}
}
TC2运行结果:
27
…
[/Quote]
grellen
2008-06-28
打赏
举报
回复
up
xibeitianlang
2008-06-27
打赏
举报
回复
#include<stdio.h>
main()
{
int i,j,k,a,b,c;
long m,n;
for(i=20; i<99; i++)
{
a=i/10; b=i%10;
if(a==b) continue;
for(j=10234/i; j<988; j++)
{
c=1<<a|1<<b;
c|=1<<(j/100)|1<<(j/10%10)|1<<(j%10);
m=(long)i*j; n=m;
for(k=0; k<5; k++)
{
c|=1<<(n%10); n/=10;
}
if(c==1023)
printf("%6d\n X%4d\n=======\n%6u\n\n",i,j,m);
}
}
}
TC2运行结果:
27
X 594
=======
16038
36
X 495
=======
17820
39
X 402
=======
15678
45
X 396
=======
17820
46
X 715
=======
32890
52
X 367
=======
19084
54
X 297
=======
16038
63
X 927
=======
58401
78
X 345
=======
26910
xibeitianlang
2008-06-27
打赏
举报
回复
#include<stdio.h>
main()
{
int i,j,k,a,b,c;
long m,n;
for(i=20; i<99; i++)
{
a=i/10; b=i%10;
if(a==b) continue;
for(j=10234/i; j<988; j++)
{
c=1<<a|1<<b;
c|=1<<(j/100)|1<<(j/10%10)|1<<(j%10);
m=(long)i*j; n=m;
for(k=0; k<5; k++)
{
c|=1<<(n%10); n/=10;
}
if(c==1023)
printf("%6d\n X%4d\n=======\n%6u\n\n",i,j,m);
}
}
}
TC2运行结果:
27
X 594
=======
16038
36
X 495
=======
17820
39
X 402
=======
15678
45
X 396
=======
17820
46
X 715
=======
32890
52
X 367
=======
19084
54
X 297
=======
16038
63
X 927
=======
58401
78
X 345
=======
26910
sprague
2008-06-26
打赏
举报
回复
兄弟,感觉应该是16组,加油,轮询当然行,在想其他方法,另外,前一个轮询稍加点判断吧,这样太。。。
The 1th answer:
12
* 483
===========
05796
The 2th answer:
18
* 297
===========
05346
The 3th answer:
27
* 198
===========
05346
The 4th answer:
27
* 594
===========
16038
The 5th answer:
28
* 157
===========
04396
The 6th answer:
36
* 495
===========
17820
The 7th answer:
39
* 186
===========
07254
The 8th answer:
39
* 402
===========
15678
The 9th answer:
42
* 138
===========
05796
The 10th answer:
45
* 396
===========
17820
The 11th answer:
46
* 715
===========
32890
The 12th answer:
48
* 159
===========
07632
The 13th answer:
52
* 367
===========
19084
The 14th answer:
54
* 297
===========
16038
The 15th answer:
63
* 927
===========
58401
The 16th answer:
78
* 345
===========
26910
xibeitianlang
2008-06-26
打赏
举报
回复
循环次数就可以直接优化。
for(i=20; i<99; i++)
{ if i个位、十位不同
{ for j=10234/i; j<988; j++)
{ if j个位、十位、百位两两不同 且 k=i*j各位数上的数字两两不同 并且 i,j,k相互间数字不同
printf(" %2d\nX %3d\n======\n%d",i,j,k);
}
}
}
heroful
2008-06-26
打赏
举报
回复
int a[5],iFlag=10,b[2],c[3],iControl=5;//iFlag控制结果值,iControl控制结果与乘数和被乘数不相等
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
for (int i=10;i<=99;i++)
{
b[0]=i/10,b[1]=i%10;
if (b[0]!=b[1]&&b[1]!=0)
for (int j=100;j<=999;j++)
{
c[0]=j/100;
c[1]=j/10%10;
c[2]=j%10;
if (c[0]!=c[1] && c[1]!=c[2] && c[0]!=c[2]&& c[2]!=0)
if(c[0]!=b[0]&&c[0]!=b[1] && c[1]!=b[0]&&c[1]!=b[1] && c[2]!=b[0]&& c[2]!=b[1])
{
a[0]=(i*j)%10;
a[1]=(i*j)/10%10;
a[2]=(i*j)/100%10;
a[3]=(i*j)/1000%10;
a[4]=(i*j)/10000;
iControl=5;
for (int l=0;l<5;l++)
if (a[l]!=c[0]&&a[l]!=c[1]&&a[l]!=c[2]&&a[l]!=b[0]&&a[l]!=b[1])
iControl--;
else
iControl++;
if (iControl==0)
{
iFlag=10;
for(int m=0;m<5;m++)
for(int n=m+1;n<5;n++)
if (a[m]!=a[n])
iFlag--;
else
iFlag++;
if(iFlag==0)
printf("%d%c%d%c%d ",i,'*',j,'=',i*j);
}
}
}
}
xibeitianlang
2008-06-26
打赏
举报
回复
首先它是一个算式!最高位是0的竖式没见过。
sprague
2008-06-26
打赏
举报
回复
每个数字不能重复,使算式成立
xibeitianlang
2008-06-26
打赏
举报
回复
万位上为0,不妥吧!
大王派我去巡山
2008-06-25
打赏
举报
回复
27*594==16038
36*495==17820
39*402==15678
45*396==17820
46*715==32890
52*367==19084
54*297==16038
63*927==58401
78*345==26910
for(int i=10; i<=99; i++)
{
for(int j=100; j<=999; j++)
{
if (i*j>=10000 and i*j<=99999 and (i,j,i*j中的数字无重复))
找到一组满足要求的解;
}
}
对重复数字的判断可以更早就开始进行(比如i=11本身就重复、i=10和j=100两者有重复),效率会更好一些。
不过这题计算量本来就没多少。
计算机
组成
原理-阵列
乘法
器的设计.doc
Y4 Y3 Y2 Y1 =B X4Y1 X3Y1 X2Y1 X1Y1 X4Y2 X3Y2 X2Y2 X1Y2 X4Y3 X3Y3 X2Y3 X1Y3 (进位) X4Y4 X3Y4 X2Y4 X1Y4 Z8 Z7 Z6 Z5 Z4 Z3 Z2 Z1 图1.1 A×B计算
竖式
X4 ,X3 ,X2 ,X1 ,Y4 ,Y3 ,Y2 ,Y1为阵列
乘法
器的输入端,...
分治法
求解
大整数
乘法
实现大整数
乘法
的方法有许多种,其中我们最简单的方法就是小学里面教的
竖式
算法,这种方法在计算过程中数AAA需要和数BBB中的每一位数相乘,并且最终对每一位进行相加,就整体而言,复杂度为O(n2)O(n^2)O(n2),对...
数学老师从没这么教过,
乘法
竖式
中进位可以是多位(附Python实现与测试源码)...
大概十五年前,曾经写过一个C语言版本的类似代码。核心思想是:在
乘法
竖式
计算过程中,每次的进位实际上是可以超过一位的,虽然老师从来没有这么教过。这样的操作在Python中是没有必要的,因为P...
《算法设计与分析》--矩阵
乘法
随笔
并且矩阵
乘法
使用的还是大整数的那种分治法的思想。 矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义[1]。一般单指矩阵乘积时,指的便是一般矩阵...
计算机
组成
原理14-定点数的
乘法
与除法运算
在计算机中,
乘法
运算是一种很重要的运算,有的机器由硬件
乘法
器直接完成
乘法
运算,有的机器内没有
乘法
器,但可以按机器作
乘法
运算的方法,用软件编程实现。因此,学习
乘法
运算方法不仅有助于
乘法
器的设计,也有助于...
数据结构与算法
33,006
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章