C语言的算法问题求解~

a1320524944 2010-08-05 06:25:30
问题:
3. 求这样一个三位数,该三位数等于其每位数字的阶乘之和。

即 abc = a! + b! + c!

(正确结果:145 = 1! + 4! +5!)

请老师们指点一下做法。谢谢

只能用while和do while来做! 可以嵌套
...全文
302 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
hslinux 2010-08-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 a1320524944 的回复:]

引用 6 楼 hslinux 的回复:

最不用费脑子的做法:暴力求解,
三个for循环(i,j,k),求(i,j,k)阶乘,相加,与组合数ijk相比较。


暴力for循环我还没学,只学了while和do while。。。

求高手给个方法 谢谢了。
[/Quote]

for ()跟while(),do..while()一个性质。。。
zhangzhongke007 2010-08-09
  • 打赏
  • 举报
回复
把数拆开嘛,然后就for循环了嘛。连我都会做。。。
wyz007134 2010-08-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 a1320524944 的回复:]
引用 6 楼 hslinux 的回复:

最不用费脑子的做法:暴力求解,
三个for循环(i,j,k),求(i,j,k)阶乘,相加,与组合数ijk相比较。


暴力for循环我还没学,只学了while和do while。。。

求高手给个方法 谢谢了。
[/Quote]
你们在学for之前先学while和do while?...
高手
qiqifanqi 2010-08-09
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <stdlib.h>
//Function.h
int factorial(int n)
{
int sum = 1 ;
int i = 1 ;
if (n == 0)
return 1 ;
else
{
while(i <= n)
{
sum *= i ;
i ++ ;
}
return sum ;
}
}

//test.c
#include "Function.h"

void main()
{
int n = 100 ;
int gw = 0 , sw = 0 ,bw = 0 ;
int temp = 0 ;
while(n < 1000)
{
temp = n ;
gw = temp % 10 ;
temp /= 10 ;
sw = temp % 10 ;
temp /= 10 ;
bw = temp % 10 ;
if(n == (factorial(gw) + factorial(sw) + factorial(bw)))
printf("%d " , n) ;
n ++ ;

}
printf("\n") ;
system("pause") ;

}
crossfire_sli 2010-08-09
  • 打赏
  • 举报
回复
while和for其实只有形式上区别,而无本质上的区别。2者可以相互替用!
cattycat 2010-08-09
  • 打赏
  • 举报
回复
就是枚举了。
marshalking0000 2010-08-09
  • 打赏
  • 举报
回复
不难
hukui161 2010-08-09
  • 打赏
  • 举报
回复
wlmjxj 2010-08-09
  • 打赏
  • 举报
回复
初学者还是自己动手解决这样的问题吧!对你也是一种锻炼!
crossfire_sli 2010-08-09
  • 打赏
  • 举报
回复
先上For循环的:

#include "stdafx.h"
#include <conio.h>
int factorial( int n)
{
int fac;
if((n == 0)||(n ==1))
{
fac = 1;
}
else
{
fac = n*factorial(n-1);
}
return fac;
}


int _tmain(int argc, _TCHAR* argv[])
{
int a, b, c;
int n = 0;
for(a = 1; a<10; a++)
{
for(b = 0; b < 10; b++)
{
for(c = 0; c < 10; c++)
{
n = factorial(a) + factorial(b) + factorial(c);
if((100*a + 10*b + c) == n)
{
printf("%d\n", n);
}
n = 0;
}
}
}
getch();
return 0;
}
Ctainan 2010-08-08
  • 打赏
  • 举报
回复
先%10把每位数都拆出来,求每个数的阶乘,顺便把阶乘和求出来,再和原数相比,如果相等,就输出这个数!
laoshandaoshi2009 2010-08-08
  • 打赏
  • 举报
回复
这个问题不难呀
logens 2010-08-08
  • 打赏
  • 举报
回复
对,很容易,自己慢慢摸索,不要老是求救
canshui 2010-08-08
  • 打赏
  • 举报
回复
即 abc = a! + b! + c!

(正确结果:145 = 1! + 4! +5!)

分离出各个位数
求每一位的阶层
canshui 2010-08-08
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 cy890 的回复:]
水仙花数而已,书上都有哦
用FOR语句都有好几个方法些写的出来
[/Quote]

这个大牛,啥叫水仙花数?
vapor_55 2010-08-08
  • 打赏
  • 举报
回复
用三层循环.
cy890 2010-08-07
  • 打赏
  • 举报
回复
水仙花数而已,书上都有哦
用FOR语句都有好几个方法些写的出来
这不是鸭头 2010-08-06
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

int factorial(int n)
{
int nResult = 1;
while (n)
{
nResult *=n;
n--;
}
return nResult;
}

bool GetEveryNum(int nNum,int &H,int &T,int &O)
{
if (nNum<100)
{
return false;
}

H = nNum/100;
nNum = nNum%100;
T = nNum/10;
nNum = nNum%10;
O = nNum;

return true;
}

int main()
{

int nNum = 999;

while(nNum>100)
{
int n,nn,nnn;
int nResult;
GetEveryNum(nNum,nnn,nn,n);
nResult = factorial(n)+factorial(nn)+factorial(nnn);
if (nResult==nNum)
{
cout<<nNum<<endl;
}
nNum --;
}


return 0;
}

jinjianxinxh 2010-08-06
  • 打赏
  • 举报
回复
貌似是作业帖,这个c的书里面好像又这个题目吧
pan6pcpc 2010-08-06
  • 打赏
  • 举报
回复
lz悲剧了
加载更多回复(11)

69,382

社区成员

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

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