以下是引用huaheshang在2014-2-25 12:13:16的发言:
某些分子和分母都是二位正整数的真分数具有下列特点:如果将该分数的分子个位数和分母十位数同时去掉,所得结果正好等于原分数约分后的结果,例如16/64=1/4,求满足上述条件的所有真分数个数。
#include"stdio.h"
#include"math.h"
int main()
{
int a,b,n=0,i,j;
double f,g;
for(a=10;a<=99;a++)
{
for(b=10;b<=99;b++)
{
i=a/10;
j=b%10;
if((j!=0)&&(a!=b))
{
f=a*(1.0/b);
g=i*(1.0/j);
if(f==g)
n++;
}
}
}
printf("%d",n);
getchar();
}
以上程序哪里有问题,为是么结果总是47,而答案是48,请指教!
48不对
应该是36
下面代码给出的是48的代码
36的代码被我屏蔽了
程序代码:
#include <stdio.h>
int gcd(int x,int y)
//欧几里得辗转相除法求两数的最大的公约数
{
if(x<y) return gcd(y,x);
if(x%y!=0) return gcd(y,x%y);
else return y;
}
int main()
{
int a,b,cnt=0,i,j;
int f=0;
for(a=10;a<100;a++)
{
for(b=10;b<100;b++)
{
i=a/10;
j=b%10;
if(a*j==b*i /*&& gcd(i,j)==1*/ && a<b)
{
printf("%d/%d===%d/%d ",a,b,i,j);
f++;
if(f%3==0) printf("\n");
cnt++;
}
}
}
printf("\n\n共%d对数字符合要求\n",cnt);
return 0;
}
[
本帖最后由 wp231957 于 2014-2-25 15:29 编辑 ]