一道小学五年级的数学题

deuso 2006-07-31 09:28:52
表弟在我家做暑假作业,问我一道题::

学习
学习进
+ 学习进步
————————
2 0 0 1

四个字各代表一个0-9的数字,问“学习进步”代表多少。

竟然在小学就会出这种题,这道题即使在现在的大学算法课上也会作为一道智力题来考大家~因为这道题需要很强的逻辑思维能力,或者是我小看了小学生的能力呢?

大家来算算结果
...全文
1271 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
eein 2006-08-03
  • 打赏
  • 举报
回复
比较喜欢wenzituo的程序!
flashlove2008 2006-08-03
  • 打赏
  • 举报
回复
脑子坏掉拉?
这么简单出动程序
难道写程序浪费的脑细胞比直接算浪费的少啊 ?
geoh 2006-08-03
  • 打赏
  • 举报
回复
C / C++ / Vb 都有啊!
呵呵!
deppew123 2006-08-03
  • 打赏
  • 举报
回复
很好嘛~~一道简单的题目能用100种以上的方法解,这就是高手啊~~~继续努力啊~
sunick1984 2006-08-03
  • 打赏
  • 举报
回复
受教了``
geoh 2006-08-02
  • 打赏
  • 举报
回复
Private Sub Form_Load()
Dim a%, b%, c%, d%
'a+ab+abc+abcd=2001
For a = 0 To 9
For b = 0 To 9
For c = 0 To 9
For d = 0 To 9
If a + a * 10 + b + a * 100 + b * 10 + c + a * 1000 + b * 100 + c * 10 + d = 2001 Then msgbox a & b & c & d: Exit Sub
Next d
Next c
Next b
Next a
End Sub
shiye777 2006-08-02
  • 打赏
  • 举报
回复
来晚了,。。。
iambtk 2006-08-02
  • 打赏
  • 举报
回复
1111学+111习+11进+1步=2001
一目了然嘛。
学=1,不然无法相加得到2001 以下分两种情况
习=8,    习=7,
进=0, 以下无法满足。
步=2,
这么穷举一下就出来了。
zhangwanlong 2006-08-02
  • 打赏
  • 举报
回复
还是用穷举好
wenzituo 2006-08-02
  • 打赏
  • 举报
回复
简洁高效!
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int jg,l,k=1,a;
cin>>jg; //划分什么数
cin>>l; //划分成几位数
for (int i=1;i<l;i++)
k=k*10+1;
for (;k>0;k/=10)
{
a=jg/k;
cout<<a<<'|';
jg-=a*k;
}
cout<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
输入:
2001
4
输出:
1|8|0|2|
O(l)的复杂度;
实际就是O(1)的复杂度!
zlp886 2006-08-02
  • 打赏
  • 举报
回复
int main(void){
int a;//千
int b;//百
int c;//十
int d;//个
int e;

int x;
scanf("%d",&x);

for(a=0;a<10;a++){
for(b=0;b<10;b++){
for(c=0;c<10;c++){
for(d=0;d<10;d++){
e = a + (a*10+b) + (a*100+b*10+c) + (a*1000+b*100+c*10+d);
if(e==x){
printf("%d,%d,%d,%d",a,b,c,d);
return 0;
}
}
}
}
}
return 0;
}
zlp886 2006-08-02
  • 打赏
  • 举报
回复
int main(void){
int a;//千
int b;//百
int c;//十
int d;//个
int e;

for(a=0;a<10;a++){
for(b=0;b<10;b++){
for(c=0;c<10;c++){
for(d=0;d<10;d++){
e = a + (a*10+b) + (a*100+b*10+c) + (a*1000+b*100+c*10+d);
if(e==3578){
printf("%d,%d,%d,%d",a,b,c,d);
return 0;
}
}
}
}
}
return 0;
}


通用性较强的一个,算这种题的程序
AdenPlus 2006-08-01
  • 打赏
  • 举报
回复
这个题目倒推不超过1分钟,要程序计算干什么!
zhy89924 2006-08-01
  • 打赏
  • 举报
回复
什么是穷举啊?
loveayu 2006-08-01
  • 打赏
  • 举报
回复
mark
xsr152639 2006-08-01
  • 打赏
  • 举报
回复
强啊
imtrash 2006-08-01
  • 打赏
  • 举报
回复
如果以小学生的逻辑思维可以这样想:

学肯定是1不可能是0,因为假若学是0,那么学+习要至少大于20,由于“学习进步”分别代表一个数字,所以排除学是0的可能;

结果的百位为0,那么1+9才是0,习是9呢还是8还是7呢?结果的个位是0,那么必然有进位,所以习是8或7,1+习+进同样不可能等于20几,所以习是8……

同理继续往前面推,就可以得出1802了

libin5555 2006-08-01
  • 打赏
  • 举报
回复
顶!
bios8086 2006-08-01
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
int i,num;
cout <<"输入你要的数字"<<endl;
cin >> num ;
if(num>9+99+999+9999||num<1111)
{
cout << "数字超出了范围"<<endl;
}
else
{
for(int x=1;x<10;x++)
for(int y=0;y<10;y++)
for(int z=0;z<10;z++)
for(int k=0;k<10;k++)
{
i=1111*x+111*y+11*z+k;
if(i==num)
{
cout<<x<<y<<z<<k<<endl;
}
}
}
return 0;
}
bios8086 2006-08-01
  • 打赏
  • 举报
回复
#include "stdafx.h"
#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
int i;
for(int x=1;x<10;x++)
for(int y=0;y<10;y++)
for(int z=0;z<10;z++)
for(int k=0;k<10;k++)
{
i=1111*x+111*y+11*z+k;
if(i==3234)
{
cout<<x<<y<<z<<k<<endl;
}
}

return 0;
}
加载更多回复(21)

69,380

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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