yezhufenglv @ 2023-12-10 22:00:47
#include <stdio.h>
int sumnum(int num)
{
return ((num/100)+((num%100)/10)+(num%10));
}
int mulnum(int num)
{
return ((num/100)*((num%100)/10)*(num%10));
}
int main()
{
int num;
int mulsum1;
int A,B,C; //比例系数
int begin,end; //循环初始值和结束值
scanf("%d %d %d",&A,&B,&C);
begin = 123;
end = 1000*A/C;
int flag = 0;
float n1,n2;
for(num=begin;num<end;num++)
{
n1 = num*B/A; n2 = num*C/A;
//判断是不是整数
if(n1!=(int)n1||n2!=(int)n2)
{
continue;
}
//判断是否满足要求
if((sumnum(num)+sumnum((int)n1)+sumnum((int)n2)==45)&&(mulnum(num)*mulnum((int)n1)*mulnum((int)n2)==362880))
{
flag = 1; //解标志位
printf("%d %d %d\n",num,(int)n1,(int)n2);
}
}
if(flag == 0 )
{
printf("No!!!\n");
}
return 0;
}
by yezhufenglv @ 2023-12-10 22:03:21
@yezhufenglv 不是#7是#2通过不了
by Wangzj512 @ 2023-12-10 22:14:33
@yezhufenglv 若num,a,b,c
均为整数,则num*a/b
依然是整除,即使赋值给一个float也还是整数。
解决方法:num*a*1.0/b
。
by yezhufenglv @ 2023-12-11 15:40:30
@Wangzj512 感谢老哥,但是还是过不了,因为那个加和乘来判断是否满足要求的语句筛不掉那个特解 特解是 77 147 397
by Wangzj512 @ 2023-12-11 22:52:12
@yezhufenglv 数组会吧?开一个大小为10
的bool
数组,每一次循环清空数组,然后把每一位数打个标记。如果这一种数字被打过标记或者最后有数字没有标记,那么就是不合法的一种。
by Wangzj512 @ 2023-12-11 23:01:10
可以写一个函数来实现这个功能
by yezhufenglv @ 2023-12-13 17:04:26
@Wangzj512 好嘞谢谢大佬