2014-6奇怪的分式
题目描述

对于分子、分母都是 1~9 中的一位数的情况,还有哪些算式可以这样计算呢?请写出所有不同算式的个数(包括题中举例的)。
显然,交换分子分母后,例如:4/1 乘以 5/8 是满足要求的,这算做不同的算式。
但对于分子分母相同的情况,2/2 乘以 3/3 这样的类型太多了,不在计数之列!
注意:答案是个整数(考虑对称性,肯定是偶数)。请通过浏览器提交。不要书写多余的内容。
int g1 = gcd(a*c, b*d);
int g2 = gcd(a*10+c, b*10+d);
if( a*c/g1 == (a*10+c)/g2 && b*d/g1== (b*10+d) /g2 )
tips:判断条件这样写也可以 if( (a*c)*(b*10+d)==(b*d)*(a*10+c) )
(1)、枚举法
int main(int argc, const char *argv[])
{
int ans = 0;
int f=0;
int a,b,c,d;
for(a=1; a<10; a++)
{
for(b=1; b<10; b++)
{
if(a!=b)
for(c=1; c<10; c++)
{
for(d=1; d<10; d++)
if(c!=d)
{
int g1 = gcd(a*c, b*d);
int g2 = gcd(a*10+c, b*10+d);
//注意判断条件的算数运算符优先级
if( a*c/g1==(a*10+c)/g2 && b*d/g1==(b*10+d)/g2 )
{
ans++;
printf("%d %d %d %d\n",a,b,c,d);
}
}
}
}
}
cout<<ans<<endl;
}
//ans 14
注意判断条件的算数运算符优先级
(2).最大公约数
判断两个分式是否相等。
辗转相除法:gcd(a,b)=gcd(b,amodb) a,b的最大公约数就是b,a mod b的最大公约数。
//循环表示
int gcd(int a, int b)
{
while(b!=0){
int t = b;
b = a%b;
a = t;
}
return a;
}
//递归表示
int gcd(int a, int b){
if(b==0) return a;
return gcd(b, a%b);
}
2013-2-马虎的算式
36 * 495 = 396 * 45 = 17820
27 * 594 = 297 * 54
a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0)
能满足形如: ab * cde = adb * ce 这样的算式一共有多少种呢?
暴力枚举 if(( a*10+b )*( c*100+d*10+e ) == ( a*100+d*10+b )*( c*10+e ))
int main(int argc, const char *argv[]){
int a,b,c,d,e;
int ans=0;
for( a=1 ; a<10 ; a++ )
{
for( b=1 ; b<10; b++)
{
if(b!=a)
for( c=1 ; c<10 ; c++ )
{
if( c!=a && c!=b )
for( d=1 ; d<10 ; d++ )
{
if( d!=a && d!=b && d!=c )
for( e=1 ; e<10 ; e++ )
{
if( e!=a && e!=b && e!=c && e!=d )
{
//ab * cde = adb * ce
if(( a*10+b )*( c*100+d*10+e ) == ( a*100+d*10+b )*( c*10+e ))
{
printf("%d%d * %d%d%d = %d%d%d * %d%d\n ",a,b,c,d,e,a,d,b,c,e);
ans++;
}
}
}
}
}
}
}
printf("%d",ans);
return 0;
}
2015-3-三羊献瑞
三羊献瑞
观察下面的加法算式:相同的汉字代表相同的数字,不同的汉字代表不同的数字
祥 瑞 生 辉
+ 三 羊 献 瑞
-------------------
三 羊 生 瑞 气
abcd + efgb = efcbh 枚举法
if(( a*1000+b*100+c*10+d ) + ( e*1000+f*100+g*10+b ) == e*10000+f*1000+c*100+b*10+h)
/*
a:祥 不含0
b:瑞
c:生
d:辉
e:三 不含0
f:羊
g:献
h:气
*/
#include<stdio.h>
#include<iostream>
int main(int argc, const char *argv[])
{
int a,b,c,d,e,f,g,h;
for( a=1; a<=9; a++)
{
for( b=0; b<=9; b++)
{
if(b!=a)
for( c=0; c<=9; c++)
{
if( c!=a && c!=b )
for( d=0; d<=9; d++)
{
if( d!=a && d!=b && d!=c )
for(e=1; e<=9; e++)
{
if( e!=a && e!=b && e!=c && e!=d )
for(f=0; f<=9; f++)
{
if( f!=a && f!=b && f!=c && f!=d && f!=e )
for(g=0; g<=9; g++)
{
if( g!=a && g!=b && g!=c && g!=d && g!=e && g!=f )
for(h=0; h<=9; h++)
{
if( h!=a && h!=b && h!=c && h!=d && h!=e && h!=f && h!=g )
//abcd + efgb = efcbh
if(( a*1000+b*100+c*10+d ) + ( e*1000+f*100+g*10+b ) == e*10000+f*1000+c*100+b*10+h)
{
printf("%2d%d%d%d\n",a,b,c,d);
printf("%2d%d%d%d\n",e,f,g,b);
printf("%d%d%d%d%d\n",e,f,c,b,h);
printf("\n");
}
}
}
}
}
}
}
}
}
}
/* 9567 三羊献瑞:1085
1085
10652*/
本文探讨了多个数学算法问题,包括分数简化、数字排列组合及加法算式解析,使用枚举法和最大公约数概念解决复杂问题。
1673

被折叠的 条评论
为什么被折叠?



