主题:那位高手能做出此题????????
huxinlu
[专家分:0] 发布于 2005-10-18 20:58:00
设计一个程序,把一个真分数表示为埃及分数之和的形式。
所谓埃及分数是指分子为1的形式。
如:7/8=1/2+1/3+1/24
回复列表 (共12个回复)
沙发
cusa [专家分:180] 发布于 2005-10-19 09:35:00
简单写了一下,结果正确。
#include <stdio.h>
int main()
{
int i,j,k;
int fz,fm;
int m_fz,m_fm;
fz = 5;
fm = 18;
for(i = 2;i < 100;i++) {
m_fz = m_fm =0;
for(j = 3;j < 100;j++) {
if(j == i) continue;
m_fz = m_fm =0;
for(k = 4;k < 100;k++) {
if(k == j || k == i) continue;
m_fz = i*j+j*k+i*k;
m_fm = i*j*k;
if((m_fz % fz == 0) && (m_fm % fm == 0) && m_fz < m_fm) {
printf("%d %d %d\n",i,j,k);
return 0;
}
}
}
}
return 0;
}
板凳
yeees [专家分:30] 发布于 2005-10-20 20:30:00
你这是c吧?
3 楼
Geminichen [专家分:50] 发布于 2005-10-20 22:26:00
我看不懂int m_fz,m_fm;是什么意思
能不能解释一下程序
我刚开始学C语言
在下先谢过了
4 楼
cusa [专家分:180] 发布于 2005-10-21 09:03:00
一个分数fz/fm可以表示成fz/fm=1/a+1/b+1/c=(a*b+b*c+a*c)/a*b*c,这个小学就学过吧
[color=008000]#include <stdio.h>[/color]
[color=0000FF]int[/color] main()
{
[color=0000FF]int[/color] i,j,k;
[color=0000FF]int[/color] fz,fm; //fz分子,fm分母
[color=0000FF]int[/color] m_fz,m_fm; //m_fz临时分子,m_fm临时分母
fz = 5;
fm = 18;
[color=0000FF]for[/color](i = 2;i < 100;i++) {
m_fz = m_fm =0;
[color=0000FF]for[/color](j = 3;j < 100;j++) {
if(j == i) continue;
m_fz = m_fm =0;
[color=0000FF]for[/color](k = 4;k < 100;k++) {
if(k == j || k == i) continue;
m_fz = i*j+j*k+i*k;
m_fm = i*j*k;
/* 如果m_fz/m_fm约分后等于fz/fm,打印此数 */
[color=0000FF]if[/color]((m_fz % fz == 0) && (m_fm % fm == 0) && m_fz < m_fm) {
printf("%d %d %d\n",i,j,k);
[color=0000FF]return[/color] 0;
}
}
}
}
[color=0000FF]return[/color] 0;
}
5 楼
qingyungene [专家分:0] 发布于 2005-10-21 09:27:00
#include<stdio.h>
main()
{
int i=2,n,m,a,b,r;
printf("please input the real faction.\n");
printf("the n is numerator.\n");
printf("the m is denominator.\n");
printf("input the n:"); /*输入分子*/
scanf("%d",&n);
printf("input the m:"); /*输入分母*/
scanf("%d",&m);
while(n!=1){
if(i*n>m){
n=i*n-m;
m=i*m;
a=m;
b=n;
r=a%b;
while(r){ /*求最大公约数*/
a=b;b=r;r=a%b;
}
m=m/b;
n=n/b;
printf("1/%d+",i); /*输出因子*/
}
i++;
}
printf("1/%d\n",m);
getch();
return;
}
试了一下
6 楼
linhuifj [专家分:40] 发布于 2005-10-21 14:43:00
//程序是错误的 输入2/5就知道了
7 楼
cusa [专家分:180] 发布于 2005-10-21 16:17:00
恩,我的程序是有问题,简单看了一下,判断语句应改成
if(m_fz * fm == m_fm * fz)
结果对了,但算法不好,也懒得看了。。。。
8 楼
qingyungene [专家分:0] 发布于 2005-10-21 19:46:00
是说我的吗?2/5=1/3+1/15啊,结果应该没问题。
9 楼
天水 [专家分:320] 发布于 2005-10-22 21:56:00
各位高手 ,能用 pascal 遍一下吗?
10 楼
独行者 [专家分:1280] 发布于 2005-10-30 10:22:00
用三个分数不一定能表示得了所有的真数分啊?也许得用更多的!
我来回复